我在Grails应用程序中进行了集成测试,当我尝试保存Member
类型的实体时失败
invitingMember.save(flush: true)
这会引发以下异常
org.hibernate.AssertionFailure: 采集 [com.mycompany.facet.Facet.channels]是 没有由flush()处理 com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy:939)
在事务的早期,我将一个对象添加到invitingMember
的集合属性中。我的猜测是在上面的行中抛出了异常,因为只有在这一点上才会保留添加到集合中的对象。
答案 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
。