如何在hibernate中实现继承?

Posted

技术标签:

【中文标题】如何在hibernate中实现继承?【英文标题】:how to implement inheritance in hibernate? 【发布时间】:2010-06-05 06:35:33 【问题描述】:

我有一个实体:

BaseEntity --> 其中包含用户登录信息,如 createdBy、createdTime、EditedBy、editedTime Employee --> 其中包含员工信息,如姓名、地址等...... RegularEmployee --> 包含工资、奖金等字段 和 ContactEmployee --> 其中包含 HourlyRate、contactPeriod 等......

我的继承结构是

在这种情况下如何设计数据库结构,考虑到所有表都有 id 和 version 字段(所有表都应该至少有这两个字段)。

【问题讨论】:

【参考方案1】:

在这种情况下如何设计数据库结构,考虑到所有表都有id和版本字段(所有表都应该至少有这两个字段)。

如果您希望 所有 表具有 id 版本字段,则必须使用 table per specific class 策略。如果您正在使用注释,请参阅 9.1.5. Table per concrete class 或 2.2.4. Mapping inheritance。

【讨论】:

【参考方案2】:

Chapter 9. Inheritance mapping

我使用了“每个班级的表格”模型。它适用于我正在做的事情。

鉴别器列告诉hibernate要实例化哪个子类,子类可以有其他子类没有的字段,但是表需要有所有的列(显然某些行为空)。

【讨论】:

【参考方案3】:

'pstanton' 给出的答案是好的并且符合标准.. 但还有另一种方法.. 与您在 Java 中实现继承相同。参考下面的映射为你解答

<union-subclass name="Employee" extends="BaseEntity" table="tb_emp" >
</union-subclass>

<class name="BaseEntity" abstract="true">
</class>

但我觉得,这样你只能实现 1 级继承..

【讨论】:

以上是关于如何在hibernate中实现继承?的主要内容,如果未能解决你的问题,请参考以下文章