Hibernate / GORM:flush()不处理集合
我在Grails应用程序中进行了集成测试,当我尝试保存Member
类型的实体时失败
invitingMember.save(flush: true)
这引发了以下exception
org.hibernate.AssertionFailure:在com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy:939)中,flush()未处理集合[com.mycompany.facet.Facet.channels]。
在事务的早期,我将一个对象添加到invitingMember
的集合属性中。 我的猜测是exception是在上面的行中引发的,因为只有在这一点上才会保留添加到集合中的对象。
潜在的问题可能是Hibernate没有级联保存。 因此,当您刷新Member
,Hibernate会注意到该集合仍然很脏(这可能不是您想要的)。 因此要么手动刷新集合,要么告诉Hibernate级联所有更新 。
我在这里找到了可能的解决方案
实际上,查看toString,equals,hashcode并确保你没有访问你的懒惰访问器。
我知道我在谈论java,这里的问题是关于grails但也许对grails有同样的东西。
不要犹豫,编辑。
这是我的问题(在java中)
我遇到该exception的唯一一次是在使用Hibernate事件时,例如beforeInsert,beforeUpdate等 – 您使用这些吗?
JIRA中存在与此相关的问题,已针对Grails 1.2进行了修复
在从集合中删除元素后尝试向集合添加元素时,我遇到了这个错误。 我在向集合添加新元素之前通过调用save(flush:true)
来解决它。
- 就我而言,总是从
select
返回集合。