3

カテゴリの階層である Grails ドメイン クラスがあります。各カテゴリには親カテゴリがあります (null であるルート カテゴリを除く)。

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 に答える