2013-05-09 20 views
0

我想要一個孩子添加到兩個不同的父類,這樣的:Grails的一對一的兩個域對象

第一:

class Member { 
    Profile profile 

    Member() { 
     this.profile = new Profile() 
    } 

    static mapping = { 
     profile cascade: 'all-delete-orphan' 
    } 
} 

二:

class Team { 
    Profile profile 

    Team() { 
     this.profile = new Profile() 
    } 

    static mapping = { 
     profile cascade: 'all-delete-orphan' 
    } 
} 

泰華孩子簡單地定義如下

class Profile() { 
    } 

問題是當我保存父母時,它保存着孩子:

Member member = new Member().save(flush: true, failOnError: true) 

assert !member.hasErrors() 
assert member.profile   
assert !member.profile.hasErrors() 

assert member.profile.id //FAIL 

我該怎麼做?有沒有更好的方法來做到這一點?

UPDATE:

我發現這個

Saving associated domain classes in Grails

這似乎是 '屬於' 是需要這種行爲。但爲什麼'cascade:'all-delete-orphan'不強制這樣做?因爲我不能在該特定情況下使用「屬於」

+0

其中是'成員'中定義的組? – 2013-05-09 09:50:26

+0

對不起,我輸入我的問題時出錯。現在它已經得到糾正,多虧了指出它! – Thermech 2013-05-09 09:52:42

+0

你在沖洗嗎? '.save(flush:true)' – 2013-05-10 13:52:20

回答

0

我找到了一個不錯的解決方案。最好的做法是定義父母在孩子中但可以爲空。像這樣:

class Profile() { 
    static belongsTo = [member: Member, team: Team] 

    static constraints = { 
     member nullable: true 
     team nullable: true 
    } 
} 

這樣,級聯行爲就工作得很好!

0

我複製了您的示例(稍作修改以將組表名更改爲非保留字),並且級聯可正常使用grails 2.2.1。 MemberGroup都將它們的存檔級聯到新創建的Profiles

假設您的班級比這更復雜,您可能在班級中的其他地方出現錯誤(例如constraints中描述的級聯行爲,而不是mapping等)。

+0

在我的真實代碼中,Group被命名爲否則:) – Thermech 2013-05-09 14:28:11