Grails GORM继承最佳实践

Grails GORM继承最佳实践,grails,inheritance,gorm,Grails,Inheritance,Gorm,我正在从事一个可能有36个域类的grails项目,每个域类都有十几个唯一属性和一些可以从基本域类继承的共享属性。问题是grails将生成一个表,其中包含从基类继承的所有域类的所有属性。这意味着一个包含300多列的表在多个级别上都有问题。另一种方法是取消继承,每个域代表一个唯一的数据库表。不管怎样,要么会花费大量时间复制代码,要么会试图管理生成的数据库。有没有我错过的另一个选择 欢迎所有的想法和意见 您似乎缺少域类的所有重要的tablePerHierarchy映射值。我强烈建议您阅读与此相关的文档

我正在从事一个可能有36个域类的grails项目,每个域类都有十几个唯一属性和一些可以从基本域类继承的共享属性。问题是grails将生成一个表,其中包含从基类继承的所有域类的所有属性。这意味着一个包含300多列的表在多个级别上都有问题。另一种方法是取消继承,每个域代表一个唯一的数据库表。不管怎样,要么会花费大量时间复制代码,要么会试图管理生成的数据库。有没有我错过的另一个选择


欢迎所有的想法和意见

您似乎缺少域类的所有重要的
tablePerHierarchy
映射值。我强烈建议您阅读与此相关的文档

从文件中:

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

根支付类的映射指定它不会 对所有子类使用逐层次表映射


不要在类之间使用继承。在继承类中进行重构是非常困难的

您可以通过接口对公共类使用动态行为,也可以在模型类中重新考虑设计

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

class CreditCardPayment extends Payment {
    String cardNumber
}