hibernate - 可能隐式地将所有嵌套的域对象重新附加到Grails中的Hibernate session 中?

标签 hibernate session grails gorm httpsession

我注意到,当从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/

相关文章:

java - 如何从 session 访问 JavaBean 数组

mysql - Grails 2.4.4 DataSource "create-drop"无法删除所有具有 FK 的表

grails - Weceem插件和Grails关于内容发布工作流程

rest - 在 Intellij IDEA 中运行时,Grails 2.5.1 Restful Controller spock 单元测试失败并显示 406

java - org.hibernate.hql.internal.ast.QuerySyntaxException : table is not mapped [from table]

java - Hibernate 搜索 - 无法执行工作。实体类不是@Indexed,也不是@ContainedIn

java - 尽管我使用 new 运算符,Spring Entity 仍为 null

java - 组织.hibernate.LazyInitializationException : failed to lazily initialize a collection of role

php - 'remember me' 功能的最佳实践?

asp.net - HttpHandler 和 session 状态的问题