3

我有一些领域类事件、问题、类别、影响、紧迫性等。

Class Incident
{
   Category category
   String subject
   Impact impact
}

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

现在,一些行被插入到这个类中。现在,如果我要删除类别,它会引发错误,例如“grails 无法删除或更新父行”.. 那么我必须做什么才能删除?

4

2 回答 2

5

问题是 - 您在事件和问题类中引用了类别,因此这些类的数据库表将在类别表上具有外键,因此您无法删除类别,直到您删除这些事件/问题或更新这些事件问题和将类别设置为空(您必须在域约束中将它们设为可空)

所以要么你做

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 来管理关系,而不是仅仅使用引用,这样可以更好地表达模型。

这也取决于您的领域模型,在您的业务中可能存在问题,事件存在没有类别!或者它们必须属于某个类别。如果您的答案是第一个选项,您不想级联删除,而是使用空类别更新这些事件/问题,如果您的答案是第二个选项 - 您需要级联 all-delete-orphan

于 2012-06-09T08:19:35.457 回答
0

您的类别如何,是否属于事件域类,如果类别属于某个域类,则不能删除它。参考:见这里

于 2012-06-09T06:40:05.603 回答