2011-09-19 126 views
1

我正在使用一些已经创建(而不是我)从grails域类的脚本。保存参考通过belongsTo

class Person extends OAP { 
    static hasMany = [addresses: Address] 
(...) 
} 

class Address { 
    static belongsTo = [oap: OAP] 
(...) 
} 

class OAP没有提及Address。

所以我试图做:

p.save() 
a.oap = p 
println a.oap 
a.save() 

p为个人和是地址,不过虽然它打印在控制台上正确的人,引用不会保存在地址表(oap_id住宿空)

PS:这可能不是最好的关系建立在Grails的,但是这就是我与

+0

试)删除第一个'p.save(',还可以使用'a.save(failOnError:真)',看看是否(以及为什么)它被保存。 – fixitagain

回答

1

工作尝试p.addToAddresses(a)然后p.save()。它应该同时保存pa。 见http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.2.4%20Sets,%20Lists%20and%20Maps

+0

显然,这是我第一次尝试。它不起作用。 – peugas55

+0

你使用哪个grails版本? grails 1.4.0.M1和2.0.0.M1/M2中存在一个错误。看看[这里](http://stackoverflow.com/questions/7387745/grails-2-0-0-m2-cascade-save-problem) 它应该与grails 1.3.7 – lowercase

+0

试试这个p.save (同花顺:真),预计暗示 –

1

我不知道格姆将如何在这种情况下的行为,因为你已经基本上进入了,你有人称这导致从人一个SAVE-UPDATE级联行为单向hasMany和地址NONE这种怪异的区域。然后,您还在Person和OAP之间建立了单向一对一关系,从而在OAP端产生ALL级联行为,在Address端产生NONE。所以我不确定这里会发生什么。你需要修复的关系之一:

  • 做起来很OAP而不是人hasMany = [address:Address]
  • 让它如此地址belongsTo = [person:Person]

或者给予一些额外的解释,你想要什么在你们的关系中做,我们可以从那里去。

+0

尝试用这个p.save(flush:true),期望suggesstion –

0

请这个尝试,它解决了我的问题

p.addToAddresses(a); 
p.save(flush:true)