我注意到当从HttpSession中获取Domain对象并将其附加回hibernate会话时,它不附加任何属性的Domain类。
例如,假设Foo和Bar都是域类,而Foo是一个分离的Domain类,它有一个属性Bar,这会失败:
myFoo.attach()
println myFoo.bar.someBarProperty //LazyInitializationException
但这成功了
myFoo.attach()
myFoo.bar.attach()
println myFoo.bar.someBarProperty //Ok
是否存在避免上述内容的myFoo.attachRecursively()或类似内容?对于一个简单的情况,这不是什么大问题,但对于更大的对象图,它可能会很混乱。
注意我意识到为此目的使用HttpSession不是最佳实践,我只在非常具体的情况下通过flash范围使用它,所以请避免“只传递id并重新加载它”类型的答案:)
答案 0 :(得分:2)
我建议您使用“myFoo.merge()”而不是“myFoo.attach()”,因为当同一个对象与其他会话相关联时那时你得到例外:
具有相同标识符值的不同对象已与会话错误[重复]
相关联当你在那时使用merge()方法时,如果object是持久性的,那么它就使用了那个对象,如果对象不是持久性或者当时没有附加,它会为该特定对象创建新的持久性并使用它。