【发布时间】:2010-11-25 08:47:02
【问题描述】:
这里是为 Grails 用户准备的。我在 grails - 用户邮件列表中询问过它,但我想既然我已经为此奋斗了几天,我应该尽可能广泛地撒网。
我在尝试模拟两者之间的关系时遇到了一些困难 在另一个对象(不同类型)中引用相同类型的对象 两个对象。
作为我正在尝试做的一个例子,假设 你正在模拟家庭成员之间的关系。任何给定的关系 “属于”两个不同的家庭成员。所以:
class Person {
hasMany[relationships: Relationship]
static mappedBy = [relationships:'p1', relationships:'p2']
}
class Relationship {
Person p1
Person p2
String natureOfRelationship // for example, "cousins"
static belongsTo = [p1: Person, p2: Person]
}
这里的意图是,如果 p1 或 p2 被删除,那么删除将 级联到 hasMany 映射中的所有关系对象。相反,每次 我试了一下,我最终违反了外键。我尝试使用 文档中涵盖的“级联”属性:
http://grails.org/doc/1.0.x/guide/single.html#5.5.2.9%20Custom%20Cascade%20Behaviour
所以我想我会将这个添加到 Person 类中:
static mapping = {
relationships cascade:'delete'
}
我也没有运气。
我还查看了 Grails 生成的 devDB.script 文件,看看它是如何生成的 在关系上设置外键。如果我手动添加“ON DELETE CASCADE" 到两个外键约束,然后它工作正常,但是 显然对自动生成的数据库脚本进行手动编辑 不是最强大的解决方案。理想情况下,我希望能够指定 使用 GORM 的行为。
那么我在这里最好的选择是什么?有没有办法强制级联删除 多个外键/所有者?我是否需要手动执行此操作 onDelete 对 Person 的操作?我是否需要进入 Hibernate 配置 这个,还是我可以在 Grails/GORM 中以某种方式做到这一点?
非常感谢您抽出宝贵的时间以及您能提供的任何帮助。
【问题讨论】:
-
戴夫,你是怎么解决这个问题的?我认为即使是代码:static mappedBy = [relationships:'p1',relationships:'p2'] 也是有问题的
标签: grails groovy foreign-keys cascading-deletes