Hibernate - 我应该将哪种继承策略用于非抽象的类,但子类可能不需要表

时间:2011-03-31 19:41:18

标签: java hibernate inheritance jpa hibernate-annotations

我的项目中有一个简单的继承关系,我希望超类是抽象的。一些继承类将需要额外的数据库信息,但其他类则不需要。我不确定使用哪种继承策略。

我似乎无法找到一个直接的答案,因为天气超级类可以有一个抽象类与JOINED策略。

我怀疑子类的数量不会太大,而且它们都不应该有很多额外的数据,所以也许SINGLE_TABLE就足够了。

我真的不想无缘无故地使用额外的表,所以TABLE_PER_CLASS是不合适的。

我很感激任何指导。

由于

2 个答案:

答案 0 :(得分:3)

如果子类不需要表,我几乎总是只使用单表方法继承。如果由于某种原因,其中一个需要表的子类有一些荒谬的额外字段(例如10+),额外的数据可能表明你需要为某些子类创建单独的表,为其他子表创建平面表。 / p>

这将如何在hibernate中专门映射,我不确定,但我认为这是一种明智的方式来模拟它。

答案 1 :(得分:0)

回答这个问题太迟了,但如果其他人有类似的情况可能会有所帮助。

使用SingleTable策略,如果其中一个子类有更多字段并且需要一个单独的表,那么使用@SecondaryTable注释将该子类标记为SecondaryTable并使用PrimaryKeyJoin(有一个注释)来加入与pk列上的超类。此外,子类中的所有字段都应使用@column批注中的“table”属性显式映射到secondaryTable。