Ребята, в чем разница между шаблонами Открыть сеанс в представлении и шаблоном Сеанс на запрос? Я использую Spring MVC и Hibernate. Я не говорю здесь о разграничении транзакций, для сеанса на запрос, похоже, 1 сеанс: 1 транзакция. Но для OSIV есть 1 сеанс, а затем несколько транзакций (по 1 для каждого вызова службы). Может кто-нибудь пролить свет на это?
Разница между сеансом на запрос и шаблоном просмотра Open Sesson в представлении
Ответы (1)
Определяющей характеристикой OSIV на самом деле является не несколько транзакций, а то, что сеанс остается открытым во время рендеринга представления. Эта страница на вики JBoss иллюстрирует эту настройку (хотя управление транзакциями вручную из веб-уровня не входит в мои обязанности). чашка чая... для более подробной информации см. Spring OpenSessionInViewFilter).
Есть одна сессия, одна транзакция. Это по-прежнему OSIV, потому что вся работа, включая рендеринг представления, выполняется внутри сеанса. Обратите внимание, что даже если вы пометите все свои сервисные методы как @Transactional (или эквивалент XML), они все равно будут участвовать в одной и той же отдельной транзакции, если они специально не требуют запуска новой транзакции.
Таким образом, OSIV может быть типом сеанса на запрос, и иногда они используются взаимозаменяемо. Но я бы сказал, что можно иметь реализацию сеанса для каждого запроса, которая не является OSIV, если вы обязательно закроете свой единственный сеанс перед визуализацией просмотра.