我正在使用一些已经创建的(而不是我)来自grails的域类来创建脚本。
class Person extends OAP {
static hasMany = [addresses: Address]
(...)
}
class Address {
static belongsTo = [oap: OAP]
(...)
}
类OAP没有对Address的引用。
所以我试图这样做:
p.save()
a.oap = p
println a.oap
a.save()
p为Person且是Address,但是虽然它在控制台上打印了正确的人,但引用不会保存在地址表中(oap_id保持为空)
P.S。:这可能不是grails中最好的关系设置,但这就是我必须要处理的事情
答案 0 :(得分:1)
尝试p.addToAddresses(a)
,然后p.save()
。它应该保存p
和a
。
见http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.2.4%20Sets,%20Lists%20and%20Maps
答案 1 :(得分:1)
我不知道GORM在这种情况下会如何表现,因为你基本上进入了这个奇怪的区域,你在Person上有一个单向hasMany
,导致Person的一个SAVE-UPDATE
级联行为地址NONE
。然后,您还在Person和OAP之间进行单向一对一,这会导致OAP端出现ALL
级联行为,并且地址侧出现NONE
。所以我不确定在这里会发生什么。您需要将关系修复为:
hasMany = [address:Address]
belongsTo = [person:Person]
或者,就你在你们的关系中尝试做什么做一些额外的解释,我们可以从那里开始。
答案 2 :(得分:0)
请尝试这个,它解决了我的问题
p.addToAddresses(a);
p.save(flush:true)