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

Dón*_*nal 14 grails hibernate grails-orm

在我的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
    }
}
Run Code Online (Sandbox Code Playgroud)

这将导致之间的关系要产生的下表AssessmentBenefit

在此输入图像描述

表对之间的关系创建AssessmentBenefit是(勿庸置疑)相同.

而不是assessment_benefitassessment和之间有一个连接表benefit,我宁愿assessment_idbenefit表中有一个外键,从而不需要连接表.

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

dma*_*tro 1

如何更改我的域模型来实现这一目标?

移动

static belongsTo = [assessment: Assessment]
Run Code Online (Sandbox Code Playgroud)

从抽象父级IncomeSource到子级Benefit为:

class Benefit extends IncomeSource {
    static belongsTo = [assessment: Assessment]
}
Run Code Online (Sandbox Code Playgroud)

您还可以将这种关系保留在基类中,并复制belongsTo到子类中。

Assessment在任何一种情况下都不会创建连接表Benefit

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

适用于 Grails 2.5.0