2009-02-06 75 views
4

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

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

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

谢谢!

回答

12

我对此的担忧之一是GORM(我会说Hibernate)为每个请求使用了开放会话视图模式,其中工作Hibernate的会话将在其结束时关闭并刷新。

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

+0

这也可能会导致您的数据库连接出现问题。当我们在http会话中存储域类超过8小时时,我们亲眼看到了它。 – 2016-04-07 21:40:47

相关问题