2009-11-09 66 views
12

我在Grails應用程序有一個集成測試,當我嘗試保存類型的實體失敗處理Member休眠/格姆:收集沒有被沖洗()

invitingMember.save(flush: true) 

這就提出了以下異常

org.hibernate.AssertionFailure: 收集 [com.mycompany.facet.Facet.channels]是 不受沖洗()在 com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberC處理onnectionService.groovy:939)

在交易之前,我向invitingMember的集合屬性添加一個對象。我的猜測是這個異常是在上面的行中引發的,因爲只是在這一點上,添加到集合中的對象纔會被持久化。

回答

6

潛在的問題可能是Hibernate沒有級聯保存。所以當你刷新Member時,Hibernate發現集合仍然很髒(這可能不是你想要的)。所以要麼手動沖洗收集或tell Hibernate to cascade all the updates

+1

我非常肯定,當使用GORM(由Grails使用的,在「Hibernate之上」構建的ORM)保存級聯默認情況下。 – 2009-11-09 15:59:34

1

我唯一遇到過這種懷疑的時候就是在使用Hibernate事件時, beforeInsert,beforeUpdate等 - 你使用這些?

有一個在JIRA與此相關的一個問題,這已得到修復Grails的1.2

+0

不,我沒有使用任何事件 – 2009-11-09 23:03:29

3

我發現了一個可能的解決方案here

其實,看看toString,equals,hashcode,並確保你沒有訪問你的懶惰訪問器。

我知道我在談論java,這裏的問題是關於grails,但也許對grails有同樣的東西。

請不要猶豫編輯。

這是問題,我(在Java)

1

我有錯誤,當試圖元素添加到集合後,刪除集合元素。在向集合添加新元素之前,我通過調用save(flush:true)來解決此問題。

  • 在我的情況下,集合總是從select返回。