2017-07-30 80 views
0

我有一个自引用域类是这样的:Grails的自参考域类令人吃惊的保存结果

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() 

什么,这是执行时出现的情况是外婆和祖父都设置为相同的实例作为NE wPerson。

我可以让这个消失在保存之前,下面两行插入()

Person pgf = father.father 
Person pgm = father.mother 
Person mgf = mother.father 
Person mgm = mother.mother 

我想整个事情是主题相关的级联可以节省,但我无法真正了解问题,而且我不愿意在代码中留下这样一个难以理解的解决方案。

谁能帮助?提前致谢!

+0

不知道'findBy'自己做了什么,不应该是'findByName'吗?此外,名称不是很独特,过了一会'findByName'不会找到正确的结果,因为它找到了第一个匹配结果 –

+0

嗨迈克,感谢您的意见。简而言之,上面是我真正有的地方摆脱了不相关属性等的简化版本。然后,在这种情况下,在这个例子中,'findBy'应该是'findByName',因为您声明(我使用findBy和其他属性真实的东西;你可以在Grails文档中找到它的例子)。至于独特性,你的观点是正确的,在真实情况下,我也使用其他属性,在'findBy'中。但最终,我提到的行为,即祖父母以某种方式不正确地更新了原始代码。 – MonetsChemist

+0

最好的办法是创建一个示例项目并将其链接到这里 –

回答

0

看来这个问题已经在Grails 2.5.5和Grails 3.3之间消失了,所以我打算将其标记为已回答并解决。