Grails 2.4.4将项目两次添加到一对多关系中

时间:2015-04-02 16:42:33

标签: grails gorm

我的模型中有两个类:贡献(提交)和版本(提交中的版本化对象)。贡献有很多版本和版本属于贡献。

当我“提交”新版本时,它会创建一个新的贡献,一个新版本和contrib.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行。将新版本添加到contrib.versions(非常奇怪),然后添加到第10行。该版本再次添加到该集合中,所以我最终在contrib.versions中重复项目。

为什么会发生这种情况?为什么保存另一个版本的实例会影响新版本和新贡献的关系?

我的解决方法是,如果没有以前的版本,只执行addToVersions,但我想知道这是否实际上是Grails错误,因为它没有多大意义。

1 个答案:

答案 0 :(得分:0)

问题是Version和Contribution之间的关系是双向的,所以当我设置version.contribution并保存版本时,Grails会自动将该版本添加到contrib.versions列表中。

所以,如果我也做了contrib.addToVersions,我最终将两个版本添加到contrib.version列表中。

可能的解决方案是:不执行addToVersions,或使关系单向。