2012-06-09 39 views
3

我有一些领域类事件,问题,分类,影响,紧急程度等子类对象不能删除

Class Incident 
{ 
    Category category 
    String subject 
    Impact impact 
} 

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

现在,一些行插入到这个类。现在,如果我删除类别它会抛出错误,如'grails不能删除或更新父行'.. 所以我必须做删除?

回答

5

的问题是 - 你必须参照事件和问题类范畴,因此对于这些类数据库表将对类别表的外键,所以你不能删除一个类别,直到你或者删除这些事件/问题或更新这些事件的问题,并设置类别为空(你必须让他们可为空域限制)

因此,无论你做

Problem.executeUpdate('update Problem p set category = null where category = ?', [category]) 

同为事件

,也可以使用属于关联和的hasMany和Grails将处理每一件事自动

有些东西一样

class Problem { 
    static belongsTo = [category:Category] 
} 

class Category { 
    static hasMany = [ 
    problems: Problem 
] 
static mappings = { 
    problems cascade: "all-delete-orphan" 
} 
} 

我宁愿使用属于关联,的hasMany关系管理,hasOne而并非只是使用模型域类参考文献,它更好地表达了模型。

这取决于您的域模型,以及您的企业可以遇到的问题,没有类别的事件存在!或者他们必须属于某个类别。如果你的答案是第一选择,你不想级联删除,但更新这些事件/问题与空类别,如果你的答案是第二选项 - 你需要级联全删除孤儿

+1

如果我选择选项2,那么在类别删除时,grails将删除事件和问题记录!!!,所以这不是个好主意......如果可能的话,其他解决方案,通过grails和thanx处理... sudhir – sanghavi7

+0

如果它解决你的问题 - 你可以接受答案。 此外 - 你想要没有类别存在的问题/事件存在或你想删除它们 - 我还不清楚。 –

+0

我希望问题和事件都存在而没有分类。 – sanghavi7

0

您的类别如何看起来是否属于事件域类,如果类别属于某个域类,则无法将其删除。 编号:See here

+0

没有类别不属于这一点。它是由其他类引用的独立类。 – sanghavi7

+0

如果类别不属于任何人不应该有任何问题在删除,奇怪。你可以显示类别 – Akhilesh

+0

的域名类是肯定为什么不! – sanghavi7