休眠/GORM:收集未由 flush() 处理

2022-09-03 06:56:48

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

invitingMember.save(flush: true)

这将引发以下异常

org.hibernate.AssertionFailure: collection [com.mycompany.facet.facet.channels] 未由 flush() 在 com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy:939) 处理

在事务的前面部分,我将一个对象添加到 的集合属性中。我的猜测是,异常是在上面的行中引发的,因为只有在此时,添加到集合中的对象才会持久化。invitingMember


答案 1

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


答案 2

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

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

我知道我说的是java,这里的问题是关于圣杯的,但也许圣杯也有同样的事情。

不要犹豫,编辑。

这是我的问题(在java中)


推荐