我注意到,当从HttpSession中获取Domain对象并将其附加回休眠 session 时,它不会附加任何属于属性的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并重新加载它”类型的答案:)
最佳答案
我建议您使用“myFoo.merge()” 而不是“myFoo.attach()” ,因为当同一对象与其他 session 相关联时,您会得到如下异常:
具有相同标识符值的不同对象已与 session 错误相关联
当您在那时使用merge()方法时,如果对象是持久性的,那么它将使用该对象,并且如果该对象不是持久性的或当时没有连接,它将为该特定对象创建新的持久性并使用它。
merge
关于hibernate - 可能隐式地将所有嵌套的域对象重新附加到Grails中的Hibernate session 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8903802/