2009-02-06 5 views
4

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

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

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

Спасибо!

ответ

12

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

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

+0

Это может также вызвать проблемы с подключением к базе данных. Мы увидели это из первых рук, когда мы хранили классы домена в сеансе http более 8 часов. –