如何在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中实现继承?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Hibernate 映射的类中实现 toString()?

如何使用hibernate在spring boot中实现分页

如何首先在代码中实现多级继承

SCD (slowly changed dimension) Type 4/6 - 如何在spring boot app, hibernate envers中实现

如何注入一个继承自另一个在 Spring 中实现的接口的接口

javascript 此代码段显示了如何在纯JavaScript中实现面向对象的继承,以便可以继承正确的函数