我的模型中有两个类:贡献(提交)和版本(提交中的版本化对象)。贡献有很多版本和版本属于贡献。
当我“提交”新版本时,它会创建一个新的贡献,一个新版本和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错误,因为它没有多大意义。
答案 0 :(得分:0)
问题是Version和Contribution之间的关系是双向的,所以当我设置version.contribution并保存版本时,Grails会自动将该版本添加到contrib.versions列表中。
所以,如果我也做了contrib.addToVersions,我最终将两个版本添加到contrib.version列表中。
可能的解决方案是:不执行addToVersions,或使关系单向。