【问题标题】:Grails belongsTo cascade on delete when belongsTo specifies multiple classes?当belongsTo指定多个类时,Grails belongsTo 级联删除?
【发布时间】:2011-04-03 23:43:45
【问题描述】:
class Owner {
    static hasMany = Dog
}
class Sitter {
    static hasMany = Dog
}
class Dog {
    static belongsTo = [Owner, Sitter]
}

我的问题是:如果我创建一个 Dog 实例 D、一个 Owner 实例 O、一个 Sitter 实例 S 并将 D 与 O 和 S 相关联,当 S 被删除时 O 会发生什么? O还会有D吗?因为它是级联删除,所以 S 和 D 都会被删除,对吧? O什么时候会发生什么?还会有D吗?

【问题讨论】:

  • 我认为它会删除实例。但是,您实际上可以在单独的项目中很容易地对其进行测试。我很想知道自己的确切答案。

标签: grails grails-orm cascade cascading-deletes


【解决方案1】:

我已经测试过了,它遵循级联规则:如果你删除 Owner,Dog 会被级联删除,但 Sitter 会保留。

这是合理的:Sitter 独立于 Owner。仅仅因为他与 Owner 有一些共同的属性,就将 Sitter 与 Owner 一起删除是不合逻辑的。

【讨论】:

  • 我的意思是,如果 Sitter 被删除,Owner 还会有狗吗?或者在您的示例中,如果所有者被删除,保姆还会有狗吗?
  • @Pau:如果 Sitter 被删除,dog 也会被级联删除。所以主人不会有狗。其他情况也一样。
  • 如果所有者被删除,有没有办法防止 Dog 被删除?因为保姆还有狗。
  • @RRK:您可以使用xml配置自定义休眠,或者使用beforeDelete触发器在删除所有者之前从所有者列表中删除狗
  • 可能还有其他一些我没有想到的特定于 Grails 的方法
猜你喜欢
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多