Вы можете сделать все за один сеанс. Но это все равно что делать все в одном классе. Это может иметь смысл с точки зрения начинающего, но на практике никто так не делает.
В веб-приложении обычно можно ожидать одновременного запуска нескольких потоков, каждый из которых имеет дело с отдельным пользователем. Каждый поток обычно имеет отдельный сеанс, и сеанс будет иметь только управляемые экземпляры объектов, которые фактически нужны этому пользователю. Дело не в том, что вы можете полностью игнорировать параллелизм в своем собственном коде, но полезно иметь помощь hibernate. Если бы вы делали все за один сеанс, вам пришлось бы выполнять все управление параллелизмом самостоятельно.
Hibernate также может управлять параллелизмом, если несколько серверов приложений взаимодействуют с одной базой данных. В этом случае отдельные JVM не могут использовать один и тот же сеанс ...
Жизненный цикл описан в документации hibernate (которую, я уверен, вы видели).
Когда бы ни поступал запрос от веб-клиента на сервер, первое, что вы должны сделать, это загрузить соответствующие объекты (см. Раздел 10.3), чтобы у вас были постоянные, а не отсоединенные объекты, с которыми нужно иметь дело. Затем вы делаете все необходимые операции. Когда сеанс закрывается (т. Е. Когда сервер возвращает ответ клиенту), он записывает любые обновления в базу данных. Или, если ваша операция предполагает создание новых сущностей, вам придется создавать временные (с new
), а затем вызывать persist () или save () (см. Раздел 10.2). Это приведет к созданию управляемого объекта - вы можете внести в него больше изменений, и Hibernate запишет эти изменения после закрытия сеанса.
Я стараюсь избегать использования отдельных объектов. Но если мне придется (возможно, они хранятся в session
пользователя), то всякий раз, когда их может понадобиться сохранить в базе данных, вам придется использовать update () (см. Раздел 10.6). Это преобразует его в управляемый объект, поэтому сеанс сохранит все изменения в базе данных, когда она будет закрыта.
Spring упрощает создание нового сеанса для каждого запроса. Обычно вы указываете Spring создать sessionFactory, и тогда каждому запросу будет предоставлен собственный сеанс. Ищите «учебник по hibernate», и вы найдете несколько примеров.