Grails域模型中的继承会导致重复的外键

时间:2015-05-21 19:11:43

标签: hibernate grails gorm

在我的Grails 2.5.0应用的域模型中,我有两个具有相同属性的类IncomeBenefit。我想将它们存储在单独的数据库表中,但将公共字段移动到基类中。我提出的模型是:

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
    }
}

这会导致为AssessmentBenefit

之间的关系生成以下表格

enter image description here

AssessmentBenefit之间的关系创建的表格(不出所料)是相同的。

我希望在assessment_benefitassessment之间建立一个benefit联接表,而不是在assessment_id表中有benefit个外键,无需连接表。

如何更改域模型以实现此目标?

1 个答案:

答案 0 :(得分:1)

  

如何更改域模型以实现此目的?

移动

static belongsTo = [assessment: Assessment]

从抽象父IncomeSource到子Benefit

class Benefit extends IncomeSource {
    static belongsTo = [assessment: Assessment]
}

您也可以将此关系保留在基类中,并将belongsTo复制到子级。

在任何一种情况下,都不会为AssessmentBenefit创建任何联接表。

如果需要类似的行为,则同样适用于Income

适用于Grails 2.5.0