【问题标题】:Grails GORM Inheritance best practicesGrails GORM 继承最佳实践
【发布时间】:2014-11-07 21:14:59
【问题描述】:
我正在从事一个 grails 项目,该项目可能有 36 个域类,每个域类都有十几个独特的属性和一些可以从基域类继承的共享属性。这样做的问题是 grails 将生成 1 个表,其中包含从基类继承的所有域类的所有属性。这意味着一个包含超过 300 列的表,这在多个级别上似乎存在问题。另一条路线是取消继承,每个域代表一个唯一的数据库表。无论如何,要么花费大量时间复制代码,要么尝试管理生成的数据库。我还有其他选择吗?
欢迎所有想法和意见。
【问题讨论】:
标签:
grails
inheritance
grails-orm
【解决方案1】:
您似乎缺少域类的所有重要的tablePerHierarchy 映射值。我强烈建议您阅读有关此的 Inheritance Strategies 文档。
来自文档:
默认情况下,GORM 类使用 table-per-hierarchy 继承映射。
这样做的缺点是列不能有 NOT-NULL
在数据库级别应用于它们的约束。如果你愿意
要使用每个子类的表继承策略,您可以这样做
如下:
class Payment {
Integer amount
static mapping = {
tablePerHierarchy false
}
}
class CreditCardPayment extends Payment {
String cardNumber
}
根支付类的映射指定它不会被
对所有子类使用逐层表映射。
【解决方案2】:
不要在类之间使用继承。在具有继承的类中进行重构非常困难。
您可以通过接口为公共类使用动态行为,或者重新考虑模型类中的设计。