在我的Grails 2.5.0应用的域模型中,我有两个具有相同属性的类Income
和Benefit
。我想将它们存储在单独的数据库表中,但将公共字段移动到基类中。我提出的模型是:
class Assessment {
Date dateCreated = new Date()
User user
static hasMany = [incomes: Income, benefits: Benefit]
}
class Benefit extends IncomeSource {}
class Income extends IncomeSource {}
abstract class IncomeSource {
String name
BigDecimal amount
PaymentFrequency frequency
static belongsTo = [assessment: Assessment]
static mapping = {
tablePerHierarchy false
}
}
这会导致为Assessment
和Benefit
为Assessment
和Benefit
之间的关系创建的表格(不出所料)是相同的。
我希望在assessment_benefit
和assessment
之间建立一个benefit
联接表,而不是在assessment_id
表中有benefit
个外键,无需连接表。
如何更改域模型以实现此目标?
答案 0 :(得分:1)
如何更改域模型以实现此目的?
移动
static belongsTo = [assessment: Assessment]
从抽象父IncomeSource
到子Benefit
:
class Benefit extends IncomeSource {
static belongsTo = [assessment: Assessment]
}
您也可以将此关系保留在基类中,并将belongsTo
复制到子级。
在任何一种情况下,都不会为Assessment
和Benefit
创建任何联接表。
如果需要类似的行为,则同样适用于Income
。
适用于Grails 2.5.0