Grails Domain - 具有多个父级联行为的子级

时间:2013-05-02 20:35:34

标签: hibernate grails gorm

我有以下域类

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"
    }
}   

Child属于Parent1和/或Parent2。

Parent1与Child具有oneToOne关系,Parent2与Child具有oneToMany关系。

问题:如果删除Parent1,我会看到属于BOTH Parent1和Parent2的Child被删除。

问题:有没有办法不自动删除子项,如果它也属于Parent2?

1 个答案:

答案 0 :(得分:1)

我能够通过以下方式克服这个问题:

用于级联保存和更新

1)从Child类

中删除belongsTo中的[parent1:Parent]

2)添加级联:"保存更新"到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()
}