2012-05-09 5 views
21

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

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

Чтобы объяснить более, я видел гибернации код, который

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

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

+1

«Когда доступ к базе данных происходит в двух сеансах, а не в том же сеансе?» https://developer.atlassian.com/display/CONFDEV/Hibernate+Sessions+and+Transaction+Management+Guidelines –

+0

FYI - есть страница в Википедии: http://en.wikipedia.org/wiki/Session_(computer_science) –

ответ

18

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

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

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

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

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

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

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

5

@Dmitry ответил очень красиво.

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

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

Смежные вопросы