0
我有一个关于Grails中的Merge()方法的问题,我阅读了文档,并且我明白这个方法返回一个持久对象,但是我没有找到任何解释原始主题(已分离)已成为什么。合并后原始对象会变成什么
我想举一个例子:
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
就像所示的代码,我强迫“USR”实例“规则”收集initialiazation,然后我把它保存在HttpSession中。 在第二个请求中,“session.usr”变成分离的,我对它做了merge(),并且我忽略了返回的附加对象,因为我会检查httpsession中原始分离对象的状态。 在第三个请求中,我尝试访问“规则”集合,并得到“延迟加载异常”,但在第一个请求中,“规则”集合已被加载...
谢谢rocher,但我仍然不明白为什么强制加载的集合在merge()之后不再存在于内存中?通过使用Hibernate.initialize(usr.rules)加载“规则”集合,然后将“usr”实例存储在httpsession中。在下一个请求中,“session.usr”变得分离,如果我将它合并回hibernate会话中,然后尝试访问原始分离对象“session.usr”的“规则”集合,我会收到一个“延迟加载异常“,但我之前已经初始化了这个集合。 – Greedydp