Хранение объектов домена Grails / GORM в сеансе - почему бы и нет? - PullRequest
4 голосов
/ 07 февраля 2009

Я изучаю Grails / GORM и, как я понял, в настоящее время рекомендуется не хранить доменные объекты в сеансе (см. http://jira.codehaus.org/browse/GRAILS-978 для возможного исправления).

Обходной путь прост; просто сохраните ссылочный идентификатор для объекта домена в сеансе, а затем повторно получите объект, используя следующий запрос.

Мой вопрос таков: почему доменные объекты не могут безопасно храниться в сеансе? Я пытаюсь понять технические детали, стоящие за этим.

Спасибо!

1 Ответ

12 голосов
/ 07 февраля 2009

Одной из моих проблем по этому поводу является то, что GORM (я бы сказал, Hibernate) использует шаблон open-session-in-view для каждого запроса, где рабочий сеанс Hibernate будет закрыт и очищен в конце.

Хранение объектов GORM в сеансе HTTP означает отсоединение объекта от предыдущего сеанса Hibernate и повторное присоединение его к вновь созданному сеансу. Это может вызвать конфликт между двумя версиями объекта.

...