問題は、インシデントと問題のクラスでカテゴリを参照しているため、これらのクラスのデータベース テーブルにはカテゴリ テーブルの外部キーがあるため、これらのインシデント/問題を削除するか、それらのインシデントの問題を更新するまでカテゴリを削除できず、カテゴリを null に設定します (ドメインの制約で null 可能にする必要があります)。
だからどちらか
Problem.executeUpdate('update Problem p set category = null where category = ?', [category])
インシデントも同様
または、begsTo と hasMany を使用してドメイン クラスをモデル化すると、grails がすべてを自動的に処理します。
何かのようなもの
class Problem {
static belongsTo = [category:Category]
}
class Category {
static hasMany = [
problems: Problem
]
static mappings = {
problems cascade: "all-delete-orphan"
}
}
単に参照を使用するのではなく、begsTo、hasMany、hasOne を使用して関係を管理することをお勧めします。これにより、モデルがより適切に表現されます。
ドメインモデルにも依存します。ビジネスで問題が発生する可能性があります。インシデントはカテゴリなしで存在します。または、何らかのカテゴリに属している必要があります。あなたの答えが最初のオプションである場合、削除をカスケードしたくありませんが、答えが2番目のオプションである場合は、これらのインシデント/問題をnullカテゴリで更新します-すべて削除-孤児をカスケードする必要があります