2011-08-16 285 views
1

我在这里坚持使用外键约束。不管是什么我指定级联行为或belongsTo/hasMany,我得到一个外键约束错误Grails级联删除?

我有这样的:

class A{ 
} 

class B{ 
} 

class C extends B { 
    static belongsTo = [a: A] 
} 

我想运行A.list()*.delete()

什么我需要做的CA级联删除?

+0

你能发布外键约束的错误? – Tom

+0

无法执行更新查询:SQL [delete form A where deleted =?] constraint [fk

+0

我的实际删除是一个'executeUpdate',其中'delete from A where condition',因为我正在删除很多记录,并且不能迭代删除。 –

回答

1

您是否在class A中添加了映射?

class A{ 

    static hasMany=[c:C] 
    static mappedBy=[c:"cColumn"] 
} 

当我从this理解,既映射应该存在

+0

在最新版本的文档中(http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.3.3%20Understanding%20Cascading%20Updates% 20和%20Deletes)它显示与这个映射关系为'单向一对一',所以我想你可能会在这里做点什么。 – proflux

+0

这会失败,因为只有C定义了列。如果我将字段移到基类B,我仍然会得到这个错误,无论是使用executeUpdate还是* .delete(); –

+0

它看起来像你需要这个AND 'A.withNewSession {} .findByBlah()*。delete() }'这看起来有点疯狂,但它是唯一可以通过我的外键集成测试,并且我不知道为什么。 –