子类对象无法删除

时间:2012-06-09 05:45:17

标签: grails gorm grails-domain-class grails-controller

我有一些域类事件,问题,类别,影响,紧急等。

Class Incident
{
   Category category
   String subject
   Impact impact
}

Class Problem
{
     Urgency urgency
     Category category
     String title
}
Class Category
{
    String categoryName
    String description
}

现在,有些行被插入到这个类中。现在,如果我删除类别,它会抛出错误,如'grails无法删除或更新父行'。 那么我要做什么才能删除?

2 个答案:

答案 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