【发布时间】:2017-07-30 21:14:54
【问题描述】:
我有一个这样的自引用域类:
class Person {
String name
Person father
Person mother
}
我对父亲或母亲没有 hasMany 或其他限制
我有一项服务可以从 .csv 文件中插入新条目,如下所示
Person father = Person.findBy(newPersonFatherName)
Person mother = Person.findBy(newPersonMotherName)
Person newPerson = new Person(
name: newPersonName,
father: father,
mother: mother)
newPerson.save()
执行此操作时,外祖母和祖父都设置为与 newPerson 相同的实例。
我可以通过在 save() 之前插入以下两行来消除这种情况
Person pgf = father.father
Person pgm = father.mother
Person mgf = mother.father
Person mgm = mother.mother
我想整个事情在某种程度上与级联保存有关,但我无法真正理解这个问题,而且我不愿意在代码中留下这样一个难以理解的解决方案。
有人可以帮忙吗?提前致谢!
【问题讨论】:
-
不确定
findBy自己做了什么,不应该是findByName吗?此外,名称不是很独特,一段时间后findByName不会为您提供正确的结果,因为它会找到第一个匹配结果 -
嗨,迈克,感谢 cmets。简而言之,以上是我真正拥有的简化版本,其中我已经摆脱了不相关的属性等。然后,在这种情况下,在这个例子中,“findBy”应该是“findByName”,正如你所说的(我使用 findBy 和其他属性真实的东西;您可以在 Grails 文档中找到它的示例)。至于唯一性,你的观点是正确的,在真实的东西中,我也在“findBy”中使用了其他属性。但最后,行为就是我提到的,即原始代码以某种方式错误地更新了祖父母。
-
最好的办法是创建一个示例项目并将其链接到此处
-
在 James Kleeh 的建议下,我创建了一个示例项目,它在最新的 Grails 2.5.5 下显示了相同的奇怪行为。我决定在 Grails 3.3.0 下尝试它,因为我很快就会把我的东西移到那里,问题似乎已经消失了。所以我将其标记为已解决。
标签: grails insert self-reference