我正在开发一个grails项目,它有36个域类,每个类都有十几个唯一属性和一些可以从基类域继承的共享属性。这个问题是grails将生成一个表,其中包含从基类继承的所有域类的所有属性。这意味着一个超过300列的表格在多个级别上似乎存在问题。另一种方法是取消继承,每个域代表一个唯一的数据库表。无论如何,要么花费大量时间来复制代码,要么试图管理生成的数据库。我还缺少另一种选择吗?
欢迎所有的想法和意见。
答案 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)
拜托,拜托! 不要在类之间使用继承。很难在具有继承的类中创建重构。也许您可以通过接口对公共类使用动态行为,或者可以重新考虑模型类中的设计。