1

我有以下域类

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。

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

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

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

4

1 回答 1

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()
}
于 2013-05-02T23:00:04.903 回答