我的模型中有两个类: Contribution (提交)和Version (提交中的版本化对象)。Contribution版本和Version belongsTo贡献。
当我“提交”一个新版本时,它会创建一个新的贡献包、一个新版本和contribution.addToVersions(版本)。这样做的效果类似于:
1. contribution = new Contribution(...)
2. newversion = new Version(contribution: contribution, ...)
3..9. ...
10. contribution.addToVersion(newversion)如果同一对象存在以前的版本,我会这样做:(这在...之前的代码片段)
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行。该版本再次添加到该集合,因此我在contribution.versions中最终得到了重复的项。
你知道为什么会发生这种情况吗?为什么保存另一个版本实例会影响新版本和新贡献的关系?
我的解决方法是,如果没有以前的版本,就只执行addToVersions,但我想知道这是否真的是Grails的bug,因为它没有多大意义。
发布于 2015-06-07 08:28:28
问题是版本和贡献之间的关系是双向的,所以当我设置version.contribution并保存版本时,Grails会自动将版本添加到contribution.versions列表中。
因此,如果我也执行contribution.addToVersions,我最终会得到添加到contribution.version列表中两次的版本。
可能的解决方案是:不做addToVersions,或者使关系成为单向的。
https://stackoverflow.com/questions/29418121
复制相似问题