4

我正在学习 Grails/GORM,据我了解,当前的最佳做法是不在会话中存储域对象(有关潜在修复,请参阅http://jira.codehaus.org/browse/GRAILS-978 )。

解决方法很简单;只需将域对象的引用 id 存储在会话中,然后在下一个请求中使用重新检索对象。

我的问题是:为什么域对象不能安全地存储在会话中?我试图了解它背后的技术细节。

谢谢!

4

1 回答 1

12

我对此的担忧之一是 GORM(我会说 Hibernate)对每个请求都使用 open-session-in-view 模式,其中工作的 Hibernate 的会话将在结束时关闭并刷新。

在 HTTP 会话中存储 GORM 对象意味着将对象从先前的 Hibernate 会话中分离出来,并将其重新附加到新创建的会话中。这可能会导致对象的两个版本之间发生冲突。

于 2009-02-06T22:44:31.303 回答