Grails GORM继承最佳实践

时间:2014-09-14 02:20:33

标签: grails inheritance gorm

我正在开发一个grails项目,它有36个域类,每个类都有十几个唯一属性和一些可以从基类域继承的共享属性。这个问题是grails将生成一个表,其中包含从基类继承的所有域类的所有属性。这意味着一个超过300列的表格在多个级别上似乎存在问题。另一种方法是取消继承,每个域代表一个唯一的数据库表。无论如何,要么花费大量时间来复制代码,要么试图管理生成的数据库。我还缺少另一种选择吗?

欢迎所有的想法和意见。

2 个答案:

答案 0 :(得分:1)

看起来您缺少域类的所有重要tablePerHierarchy映射值。我强烈建议您阅读有关此内容的Inheritance Strategies文档。

来自文档:

  

默认情况下,GORM类使用table-per-hierarchy继承映射。   这样做的缺点是列不能具有NOT-NULL   在数据库级别应用于它们的约束。如果你愿意的话   要使用每个子类的表继承策略,你可以这样做   如下:

class Payment {
    Integer amount
    static mapping = {
        tablePerHierarchy false
    }
}

class CreditCardPayment extends Payment {
    String cardNumber
}
  

根Payment类的映射指定它不会   为所有子类使用table-per-hierarchy映射。

答案 1 :(得分:0)

拜托,拜托! 不要在类之间使用继承。很难在具有继承的类中创建重构。也许您可以通过接口对公共类使用动态行为,或者可以重新考虑模型类中的设计。