首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails 2.4.4向一对多关系中添加了两次项

Grails 2.4.4向一对多关系中添加了两次项
EN

Stack Overflow用户
提问于 2015-04-03 00:42:33
回答 1查看 74关注 0票数 0

我的模型中有两个类: Contribution (提交)和Version (提交中的版本化对象)。Contribution版本和Version belongsTo贡献。

当我“提交”一个新版本时,它会创建一个新的贡献包、一个新版本和contribution.addToVersions(版本)。这样做的效果类似于:

代码语言:javascript
复制
1. contribution = new Contribution(...)
2. newversion = new Version(contribution: contribution, ...)
3..9. ...
10. contribution.addToVersion(newversion)

如果同一对象存在以前的版本,我会这样做:(这在...之前的代码片段)

代码语言:javascript
复制
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,因为它没有多大意义。

EN

回答 1

Stack Overflow用户

发布于 2015-06-07 08:28:28

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

因此,如果我也执行contribution.addToVersions,我最终会得到添加到contribution.version列表中两次的版本。

可能的解决方案是:不做addToVersions,或者使关系成为单向的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29418121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档