我正在学习Grails / GORM,正如我所理解的那样,目前的最佳做法是不在会话中存储域对象(有关可能的修复,请参阅http://jira.codehaus.org/browse/GRAILS-978)。
解决方法很简单;只需在会话中存储域对象的引用ID,然后在下一个请求中重新检索该对象。
我的问题是:为什么域对象无法安全地存储在会话中?我正在努力了解其背后的技术细节。
谢谢!
答案 0 :(得分:12)
我对此的一个担忧是GORM(我会说Hibernate)对每个请求使用open-session-in-view模式,其中工作Hibernate的会话将在其结束时关闭并刷新。
在HTTP会话中存储GORM对象意味着将对象与先前的Hibernate会话分离,并将其重新附加到新创建的会话。这可能会导致对象的两个版本之间发生冲突。