【问题标题】:Integrity reference in table per subclass domain inheritance每个子类域继承的表中的完整性引用
【发布时间】:2014-11-14 13:09:14
【问题描述】:

我在 GORM (grails 2.4.3) 中使用 tablePerSubclass 继承选项遇到了一个奇怪的行为

拥有一个超类域项目

class Item {

    static mapping = {
        tablePerHierarchy false
    }
}

还有一个子类,比如说书

class Book extends Item {
    String      name           
    String      description   
}

我在 MySQL 中有两个表:Item 和 Book,当我保存 Book 项目时,我可以在 Item 表中看到条目。然后我删除了 Books 表中的元素,但 Item 表仍然有参考!!

这怎么可能?

【问题讨论】:

  • 我读过stackoverflow.com/questions/16686322/… 看起来很有希望,但我在实际的 2.4.3 版本发布后也遇到了同样的问题,应该在其中更正
  • 是否需要指定级联? child cascade: 'all-delete-orphan'
  • 我希望 FK 创建能够强制执行参照完整性,如 jira.grails.org/browse/GRAILS-7729 所述,它指出该问题已在 2.3.8 中关闭,但使用 2.4.3 时我遇到了同样的问题。现在,也许我缺少一些配置选项或其他东西......我不知道

标签: mysql grails inheritance grails-orm


【解决方案1】:

在这种环境中,当删除子表中的记录时,grails 会尝试删除父表中的条目。然而,这似乎是在不同的事务中完成的,因此如果第二次删除失败,则 grails 无法恢复到一致状态。

【讨论】:

  • 这不是真的。您可以使用通常的 @Transactional 注释回滚整个操作。
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多