2015-04-02 67 views
0

我在我的模型兩類:貢獻(提交)和版本(版本化對象在提交)。貢獻有許多版本和版本屬於貢獻。Grails的2.4.4增加了項目兩次,一個一對多的關係

當我「犯」的新版本,它創造了新的貢獻,新版本和contribution.addToVersions(版本)。這確實是這樣的:

1. contribution = new Contribution(...) 
2. newversion = new Version(contribution: contribution, ...) 
3..9. ... 
10. contribution.addToVersion(newversion) 

如果以前的版本存在相同的對象,我做的:(這正好在...以前snipet的)

3. if (Version.countByUid(newversion.uid) > 0) { 
4. prevVersion = Version.findBtUid(newversion.uid) 
5. prevVersion.lastVersion = false 
6. prevVersion.save() <<<< THIS IS ADDING THE newversion TO contribution.versions 
7. 
8. newversion.updateVersion() // updates the las part of the uid 
9. } 

是問題,當我接收新版本的現有版本,第6行。將新版本添加到contribution.versions(很奇怪),然後在第10行。版本再次添加到該集合,所以我最終在貢獻中重複項目。版本。

任何想法爲什麼會發生這種情況?爲什麼保存另一個版本的實例會影響新版本與新貢獻的關係?

我的解決方法是隻需要執行addToVersions如果沒有以前的版本,但我想知道如果這實際上是一個Grails錯誤buecause它並沒有多大意義。

回答

0

問題是版本之間的關係和貢獻是雙向的,所以當我設置version.contribution並保存版本,該版本會自動的Grails的contribution.versions列表中。

所以,如果我也做了contribution.addToVersions,我結束了兩次添加到列表contribution.version的版本。

可能的解決方案是:沒有做addToVersions,或使關係是單向的。

相關問題