2013-05-02 23 views
1

我有以下域類Grails領域 - 孩子與父母多級聯行爲

class Child { 
    static belongsTo = [parent1: Parent1, parent2: Parent2] 
    static constraints = { 
     parent1(nullable: true) 
     parent2(nullable: true) 
    } 
} 

class Parent1 { 
    Child singleChild 
} 

class Parent2 { 
    static hasMany = [children: Child] 
    static mappedBy = [children: 'parent2'] 
    static mapping = { 
     children cascade: "all, all-delete-orphan" 
    } 
} 

兒童屬於Parent1和/或Parent2。

父母1與子女有一對一的關係,父母2與子女有一對多的關係。

問題:如果我刪除Parent1,我看到屬於Parent1和Parent2的Child被刪除。

問題:如果它還屬於Parent2,是否有辦法不自動刪除子項?

回答

1

我能夠通過執行以下操作來解決這個問題:

對於級聯保存和更新

1)刪除[parent1:家長來自屬於關聯在子類

2)添加級聯:將「save-update」更改爲Parent1類。

這是修改的Child和Parent類。沒有改變Parent2

class Child { 
    static belongsTo = [parent2: Parent2] 
    static constraints = { 
     parent2(nullable: true) 
    } 
} 

class Parent1 { 
    Child singleChild 
    static mapping = { 
     singleChild cascade: "save-update" 
    } 
} 

當Parent1被刪除,我檢查是否有singleChild Parent2。如果不是,那麼我刪除singleChild。這裏是代碼

if(parent1.singleChild.parent2 == null) { 
    parent1.singleChild.delete() 
}