这是针对 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 映射中的所有关系对象。相反,每次
我尝试了一下,结果出现了外键违规。我尝试使用
文档中介绍的“cascade”属性:
http://grails.org/doc/1.0.x/guide/single.html#5.5.2.9%20 Custom%20 Cascade%20 行为 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 中以某种方式做到这一点吗?
非常感谢您抽出宝贵时间并提供任何帮助。