Подтвердить что ты не робот

Что такое сеанс базы данных?

Я понимаю общее понимание концепции транзакции базы данных. Мы получаем доступ к базе данных в транзакции для обеспечения свойств ACID.

В Hibernate существует концепция, называемая сеансом. Какая польза от сеанса? Когда доступ к базе данных происходит в двух сеансах, а не в том же сеансе?

Чтобы объяснить больше, я видел спящий код, который

  • получает сеанс из сеанса factory
  • открывает сеанс
  • начинает транзакцию
  • совершает транзакцию
  • закрывает сеанс

Что мне нужно знать, в чем важность сессии здесь? Почему бы не иметь что-то вроде транзакции factory, начать транзакцию и совершить транзакцию?

4b9b3361

Ответ 1

Сессия - это не просто транзакция, а реализация UnitOfWork. Другими словами, он держится за загруженные объекты, знает, какие объекты должны сохраняться и т.д.:

Единица работы отслеживает все, что вы делаете во время бизнес-транзакции, которая может повлиять на базу данных. Когда все будет готово, он выяснит все, что нужно сделать, чтобы изменить базу данных в результате вашей работы.

Чтобы лучше понять связь между сеансом и транзакцией, вы можете взглянуть на в этой статье.

Один сеанс Hibernate может иметь ту же область действия, что и транзакция с одной базой данных.

Это наиболее распространенная модель программирования, используемая для шаблона реализации сеанса за запрос. Один сеанс и одна транзакция базы данных реализуют обработку конкретного события запроса (например, запрос Http в веб-приложении). Никогда не используйте анти-шаблон сеанса за операцию! (Есть чрезвычайно редкие исключения, когда сеанс за операцию может быть уместным, вы не столкнетесь с ними, если вы просто изучаете Hibernate.)

Другая модель программирования - это длительная беседа, например. приложение, которое реализует многошаговое диалоговое окно, например диалоговое окно мастера, для взаимодействия с пользователем в нескольких циклах запроса/ответа. Одним из способов реализации этого является шаблон сеанса за запрос-с-отсоединенный объект. Когда постоянные объекты считаются отключенными во время пользовательского времени и должны быть повторно подключены к новому сеансу после их изменения.

Рекомендуется использовать шаблон сеанса для разговора. В этом случае один сеанс имеет большую область действия, чем транзакция с одной базой данных, и может охватывать несколько транзакций базы данных. Каждое событие запроса обрабатывается в одной транзакции базы данных, но очистка сеанса будет отложена до конца разговора и последней транзакции базы данных, чтобы сделать разговор атомарным. Сессия проводится в отключенном состоянии без открытого подключения к базе данных во время пользовательского времени. Для обеспечения развязки беседы используется автоматический оптимизированный спящий режим concurrency (с управлением версиями).

Ответ 2

@Дмитрий очень хорошо ответил.

Другой способ просмотра сеанса - Экземпляр использования базы данных. Когда вы создаете сеанс, у вас есть контекст, готовый для любого взаимодействия с базами данных со службами поддержки (например, транзакцией, кэшированием, соединением и т.д.), Требуемыми в нем. Транзакция - это независимая служба, используемая в сеансе.

Также сеанс - это кеш первого уровня, используемый обычными инструментами отображения OR, такими как спящий режим. Сеанс действует как временный контекст, созданный по запросу для облегчения взаимодействия с БД.