16

我的 Grails 应用程序中有一个集成测试在我尝试保存类型实体时失败Member

invitingMember.save(flush: true)

这会引发以下异常

org.hibernate.AssertionFailure:com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy:939) 处的 flush() 未处理集合 [com.mycompany.facet.Facet.channels]

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

4

4 回答 4

9

潜在的问题可能是 Hibernate 没有级联保存。因此,当您刷新 时Member,Hibernate 会注意到该集合仍然是脏的(这可能不是您想要的)。所以要么手动刷新集合,要么告诉 Hibernate 级联所有更新

于 2009-11-09T15:12:31.060 回答
4

我在这里找到了一个可能的解决方案。

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

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

不要犹豫编辑。

这对我来说是个问题(在java中)

于 2012-01-04T14:08:47.273 回答
2

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

  • 就我而言,集合总是从select.
于 2015-01-30T15:05:00.897 回答
2

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

JIRA 中有一个与此相关的问题,该问题已针对 Grails 1.2 进行了修复

于 2009-11-09T22:10:29.763 回答