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