在hibernate中每个子类和每个层次结构混合表

时间:2010-05-17 06:55:51

标签: hibernate inheritance subclass

在我的数据库中有两个表。第一个表 ABSTRACT ,包含三列

id, type, someText

此表包含抽象类 abstract 的所有抽象信息。现在,两个表 CONCRETEONE CONCRETETWO 包含具体类 concreteOne concreteTwo 的所有信息。现在我知道我可以使用来自hibernate的每个子类策略的表来创建一个带继承的映射。但是,由于我有一个标记具体实现类型的列,是否可以使用鉴别器创建一些混合行为,如每个子类策略的表?

1 个答案:

答案 0 :(得分:2)

应根据数据库设计选择Hibernate继承映射策略。

如果无法更改数据库设计,请坚持使用当前数据库设计的最佳策略。即每个子类策略的表。

如果您可以更改数据库设计,请先忘记Hibernate,重点关注哪种数据库表设计更适合您的应用程序。 要考虑的一些因素, a)如何获取/使用数据? 可以说,如果大多数时候,逻辑不关心区分CONCRETEONE和CONCRETETWO,那么没有必要去寻找子表。 b)CONCRETEONE和CONCRETETWO需要多少个附加列? 如果你有很多特定于子表的列,那么“每个类层次表”并不是一个好主意。 c)特定于子表的列不应为“NOT-NULL”。

希望这会有所帮助。