覆盖Grails子类中的belongsTo / hasMany

时间:2014-02-17 18:00:55

标签: grails grails-domain-class

我有这四个班级:

class Animal {
    static hasMany = [legs: Leg]
}

class Cat extends Animal {
    static hasMany = [legs: CatLeg] // Should I remove this line?
}

class Leg {
    static belongsTo = [animal: Animal]
}

class CatLeg extends Leg {
    static belongsTo = [animal: Cat] // Should I remove this line?
}

这没关系?是否有必要或建议在子类中再次声明这些变量?添加或省略它们之间的区别是什么?

我目前正在使用Grails 2.2.2。

谢谢,

霍尔迪阿

1 个答案:

答案 0 :(得分:0)

这取决于您的Hibernate设置。默认情况下,在Grails中,Hibernate将对象的层次结构映射到1个表(每个表的层次结构)。这意味着,您不需要在子类中再次声明引用。 GORM层将关注正确的类(Leg vs. CatLeg)。

通常,我建议完全避免使用对象层次结构并将其替换为合成,特别是如果您有引用对象的层次结构。我假设,如果将来需求发生变化,您可能会遇到麻烦,因为数据迁移到新模型。