3

我有一个 Grails 域类,它是类别的层次结构。每个类别都有一个父类别(根类别除外,它为空)。

class Category {
    String name

    static mapping = {
        cache true
        name index:'category_name_idx'
    }

    static belongsTo = [parent:Category]

    static constraints = {
        parent(nullable:true)
    }
}

我的问题:删除与我期望的完全相反的级联:

  • someSubCategory.delete() 删除类别,然后尝试删除父类别(如果父类别有其他子类别,则会失败并违反完整性)。
  • parentCategory.delete() 不会级联删除其子级,而是会因违反完整性而失败。

我究竟做错了什么?我的理解是,上面的“belongsTo”应该告诉 GORM 级联删除从父级到所有子级,而不是从子级到其父级。

4

2 回答 2

6

如果我理解正确,类别属于父母,父母可以有多个孩子,所以我认为你需要一个 hasMany 关系,如下所示:

class Category {
    String name

    static mapping = {
        cache true
        name index:'category_name_idx'
    }

    static belongsTo = [parent:Category]
    static hasMany = [children: Category]

    static constraints = {
        parent(nullable:true)
    }
}

我有类似的结构,并且以这种方式删除从未遇到过问题。

希望这可以帮助!

于 2011-03-29T15:54:05.367 回答
1

这不是答案,但我找到了解决我自己问题的方法。您可以删除 belongsTo = [parent:Category],用一个简单的实例变量替换它。这会阻止 subCategory.delete() 级联到父级。

class Category {
    String name
    Category parent

    static mapping = {
        cache true
        name index:'category_name_idx'
    }

    static constraints = {
        parent(nullable:true)
    }
}
于 2011-03-29T13:21:55.617 回答