2011-09-19 98 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)