Hibernate / GORM:flush()不处理集合

时间:2009-11-09 15:06:17

标签: java hibernate grails gorm

我在Grails应用程序中进行了集成测试,当我尝试保存Member类型的实体时失败

invitingMember.save(flush: true)

这会引发以下异常

  

org.hibernate.AssertionFailure:   采集   [com.mycompany.facet.Facet.channels]是   没有由flush()处理   com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy:939)

在事务的早期,我将一个对象添加到invitingMember的集合属性中。我的猜测是在上面的行中抛出了异常,因为只有在这一点上才会保留添加到集合中的对象。

4 个答案:

答案 0 :(得分:8)

潜在的问题可能是Hibernate没有级联保存。因此,当您刷新Member时,Hibernate会注意到该集合仍然很脏(这可能不是您想要的)。因此,要么手动清除集合,要么tell Hibernate to cascade all the updates

答案 1 :(得分:3)

我找到了一个可能的解决方案here

实际上,查看toString,equals,hashcode并确保您没有访问懒惰访问器。

我知道我在谈论java,这里的问题是关于grails但也许Grails有同样的东西。

不要犹豫,编辑。

这是我的问题(在java中)

答案 2 :(得分:2)

我遇到该异常的唯一一次是使用Hibernate事件,例如beforeInsert,beforeUpdate等 - 您使用的是这些吗?

JIRA中存在与此相关的问题,已为Grails 1.2修复了

答案 3 :(得分:2)

在从集合中删除元素后尝试将元素添加到集合时,我遇到了这个错误。我在向集合中添加新元素之前调用了save(flush:true)来解决它。

  • 在我的情况下,该集合始终从select
  • 返回