【问题标题】:Grails 2.4.4 adds item twice to one-to-many relationshipsGrails 2.4.4 将项目两次添加到一对多关系
【发布时间】:2015-06-07 08:28:28
【问题描述】:

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

当我“提交”一个新版本时,它会创建一个新贡献,一个新版本和一个contribution.addToVersions(version)。这类似于:

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 中有重复的项目。

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

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

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

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

    因此,如果我还执行了contribution.addToVersions,我最终会将版本添加到contribution.version 列表中。

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

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      相关资源
      最近更新 更多