Ответ 1
Сессия - это не просто транзакция, а реализация UnitOfWork. Другими словами, он держится за загруженные объекты, знает, какие объекты должны сохраняться и т.д.:
Единица работы отслеживает все, что вы делаете во время бизнес-транзакции, которая может повлиять на базу данных. Когда все будет готово, он выяснит все, что нужно сделать, чтобы изменить базу данных в результате вашей работы.
Чтобы лучше понять связь между сеансом и транзакцией, вы можете взглянуть на в этой статье.
Один сеанс Hibernate может иметь ту же область действия, что и транзакция с одной базой данных.
Это наиболее распространенная модель программирования, используемая для шаблона реализации сеанса за запрос. Один сеанс и одна транзакция базы данных реализуют обработку конкретного события запроса (например, запрос Http в веб-приложении). Никогда не используйте анти-шаблон сеанса за операцию! (Есть чрезвычайно редкие исключения, когда сеанс за операцию может быть уместным, вы не столкнетесь с ними, если вы просто изучаете Hibernate.)
Другая модель программирования - это длительная беседа, например. приложение, которое реализует многошаговое диалоговое окно, например диалоговое окно мастера, для взаимодействия с пользователем в нескольких циклах запроса/ответа. Одним из способов реализации этого является шаблон сеанса за запрос-с-отсоединенный объект. Когда постоянные объекты считаются отключенными во время пользовательского времени и должны быть повторно подключены к новому сеансу после их изменения.
Рекомендуется использовать шаблон сеанса для разговора. В этом случае один сеанс имеет большую область действия, чем транзакция с одной базой данных, и может охватывать несколько транзакций базы данных. Каждое событие запроса обрабатывается в одной транзакции базы данных, но очистка сеанса будет отложена до конца разговора и последней транзакции базы данных, чтобы сделать разговор атомарным. Сессия проводится в отключенном состоянии без открытого подключения к базе данных во время пользовательского времени. Для обеспечения развязки беседы используется автоматический оптимизированный спящий режим concurrency (с управлением версиями).