Java Hibernate/GORM:flush()未处理集合
我的Grails应用程序中有一个集成测试,当我试图保存类型为Java Hibernate/GORM:flush()未处理集合,java,hibernate,grails,gorm,Java,Hibernate,Grails,Gorm,我的Grails应用程序中有一个集成测试,当我试图保存类型为Member invitingMember.save(flush: true) 这会引发以下异常 org.hibernate.AssertionFailure: 收集 [com.mycompany.facet.facet.channels]是 未由位于的flush()处理 com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionSe
Member
invitingMember.save(flush: true)
这会引发以下异常
org.hibernate.AssertionFailure:
收集
[com.mycompany.facet.facet.channels]是
未由位于的flush()处理
com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy:939)
在前面的事务中,我向
invitingMember
的集合属性添加了一个对象。我猜异常是在上面的一行抛出的,因为只有在这一点上,添加到集合中的对象才会被持久化。潜在的问题可能是Hibernate没有级联保存。因此,当您刷新成员时,Hibernate会注意到集合仍然脏(这可能不是您想要的)。因此,要么手动刷新集合,要么。我唯一遇到异常的时候是在使用Hibernate事件时,例如beforeInsert、beforeUpdate等-您正在使用这些吗
JIRA中有一个与此相关的问题,已经在Grails1.2中修复了这个问题,我找到了一个可能的解决方案
实际上,请查看toString、equals和hashcode,并确保您没有访问惰性访问器
我知道我说的是java,这里的问题是关于grails的,但也许grails也有同样的问题
不要犹豫编辑
这是我的问题(在java中)当从集合中删除元素后,尝试向集合中添加元素时,我出现了该错误。在向集合添加新元素之前,我通过调用save(flush:true)
解决了这个问题
- 在我的例子中,集合总是从
select
返回
我非常确定,在使用GORM(Grails使用的ORM,构建在“Hibernate”之上)时,默认情况下会级联保存。