是否可以隐式地将所有嵌套的域对象重新附加到Grails中的Hibernate会话?

是否可以隐式地将所有嵌套的域对象重新附加到Grails中的Hibernate会话?,hibernate,session,grails,gorm,httpsession,Hibernate,Session,Grails,Gorm,Httpsession,我注意到,当从HttpSession获取域对象并将其附加回hibernate会话时,它不会附加任何作为属性的域类 例如,假设Foo和Bar都是域类,并且Foo是分离的域类,并且具有属性栏,则此操作将失败: myFoo.attach() println myFoo.bar.someBarProperty //LazyInitializationException 但这是成功的 myFoo.attach() myFoo.bar.attach() println myFoo.bar.someBarP

我注意到,当从HttpSession获取域对象并将其附加回hibernate会话时,它不会附加任何作为属性的域类

例如,假设Foo和Bar都是域类,并且Foo是分离的域类,并且具有属性栏,则此操作将失败:

myFoo.attach()
println myFoo.bar.someBarProperty //LazyInitializationException
但这是成功的

myFoo.attach()
myFoo.bar.attach()
println myFoo.bar.someBarProperty //Ok
是否有任何myFoo.AttachRecursive()或类似的方法可以避免上述情况?对于一个简单的例子来说,这不是什么大问题,但是对于一个更大的对象图来说,它可能会很混乱


注意:我意识到为此目的使用HttpSession不是最佳实践,我只在非常特定的情况下通过flash scope使用它,因此请避免“只传递id并重新加载它”类型回答:)

我建议您使用“myFoo.merge()”而不是“myFoo.attach()”因为当同一对象与其他会话关联时,会出现如下异常:

具有相同标识符值的不同对象已与会话错误[duplicate]关联。

当您在那个时候使用merge()方法时,如果对象是持久性的,那么它使用那个对象;如果对象不是持久性的,或者当时没有附加,那么它会为那个特定的对象创建新的持久性并使用它


参考条有什么级联设置?好问题。就我而言,富属于酒吧。也许这就是它不会隐式重新连接的原因。静态belongsTo=[bar:bar]