合并后原始对象会变成什么样

时间:2014-06-23 15:14:46

标签: hibernate grails

我有一个关于Grails中的Merge()方法的问题,我读了doc,我明白这个方法返回一个持久对象,但是我找不到关于原始对象(已分离)有什么的解释成了。

我想举个例子:

request_1 : usr=User.get(id); Hibernate.initialize(usr.rules) ; session.currentUser = usr
request_2 : session.currentUser.merge() // i've ignored the returned attached object
request_3 : log.info session.currentUser.rules.collect{it.authority} // Lazy loading exception

就像显示的代码一样,我强制对#34;规则"进行初始化。收集" usr"实例,然后我将其保存在httpSession中。 在第二个请求中," session.usr"变得分离了,我对它做了一个merge(),我忽略了返回的附加对象,因为我会检查httpsession中原始分离对象的状态。 在第三个请求中,我尝试访问"规则"收集,我得到一个"延迟加载例外",但在第一个请求中,"规则"集合已加载......

1 个答案:

答案 0 :(得分:1)

merge()返回的对象与会话中的实例不同,而是新实例与您在HTTP会话中保存的分离对象的状态的组合。您需要确保在合并后初始化关联。坦率地说,执行热切的查找程序并执行手动合并会更有效。