san*_*vi7 3 grails grails-orm grails-controller grails-domain-class
我有一些域类事件,问题,类别,影响,紧急等.
Class Incident
{
Category category
String subject
Impact impact
}
Class Problem
{
Urgency urgency
Category category
String title
}
Class Category
{
String categoryName
String description
}
Run Code Online (Sandbox Code Playgroud)
现在,一些行被插入到这个类中.现在,如果我删除类别,它会抛出错误,如'grails无法删除或更新父行'..所以我必须做什么删除?
问题是 - 您在事件和问题类中引用了类别,因此这些类的数据库表将在类别表上具有外键,因此您无法删除类别,直到您删除这些事件/问题或更新这些事件问题和将category设置为null(您必须在域约束中将它们设置为可为空)
所以要么你做
Problem.executeUpdate('update Problem p set category = null where category = ?', [category])
Run Code Online (Sandbox Code Playgroud)
同样的事件
或者,您可以使用belongsTo和hasMany为您的域类建模,并且grails将自动处理所有事物
就像是
class Problem {
static belongsTo = [category:Category]
}
class Category {
static hasMany = [
problems: Problem
]
static mappings = {
problems cascade: "all-delete-orphan"
}
}
Run Code Online (Sandbox Code Playgroud)
我更愿意使用belongsTo,hasMany,hasOne来管理关系,而不是仅使用引用,它更好地表达模型.
这取决于您的域模型,在您的业务可以出现问题,事件存在没有类别!或者他们必须属于某个类别.如果你的答案是第一个选项,你不想级联删除,但是用null类别更新那些事件/问题,如果你的答案是第二个选项 - 你需要cascade all-delete-orphan