如何在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中实现