gpt4 book ai didi

Grails - 具有级联删除的同一类的多个belongsTo

转载 作者:行者123 更新时间:2023-12-04 08:53:46 26 4
gpt4 key购买 nike

这是给 Grails 用户的。我在 grails - user mailing list 上问过它,但我想既然我已经为此奋斗了几天,我应该尽可能广泛地撒网。

我在尝试模拟两者之间的关系时遇到了一些困难
在另一个对象(不同类型)中引用相同类型的对象
两个对象。

作为我正在尝试做的一个例子,假设
你正在模拟家庭成员之间的关系。任何给定的关系
“属于”两个不同的家庭成员。所以:

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 中以某种方式做到这一点?

非常感谢您抽出宝贵的时间以及您可以提供的任何帮助。

最佳答案

您可以添加 beforeDelete Hook 到 Person 类并查询另一个父类。如果另一个父级不存在,您可以删除该关系。请注意,您遇到外键违规是因为您可能需要删除两个父级,因为该关系对它们都有一个 FK。

关于Grails - 具有级联删除的同一类的多个belongsTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com