Hibernate - 如何避免数据库中多个表的重复[重复]

Posted

技术标签:

【中文标题】Hibernate - 如何避免数据库中多个表的重复[重复]【英文标题】:Hibernate - How to avoid duplicates across multiple tables in database [duplicate] 【发布时间】:2019-11-06 15:28:48 【问题描述】:

假设我有一个名为 Employee 的实体,它包含 10 列。我还有一些其他实体,例如 ManagerSalesmanLawyerHumanResource。所有这些类都将继承自Employee,并且会拥有一两个不同的字段。我想要做的是避免保存在数据库中的所有重复值。如果我使用@MappedSuperclass,所有字段都将保存到所有表中,因此会重复。如果我使用@Embedded,结果将是相同的。我想知道除了用@OneToMany 与其他实体的关系创建Employee 实体/表之外,我还有什么其他选择?

【问题讨论】:

@MappedSuperclass 仅用于处理 Java 域模型中存在继承而不是数据库中的情况。对于模型中的继承在数据库中参见***.com/questions/9667703/… @AlanHay 我有一个关于@Interitance 的快速问题。 @NamedQuery 是否在子类可访问的超类中定义? 【参考方案1】:

您可以使用@Inheritance(strategy=InheritanceType.JOINED) 在单个Employee 表中包含来自Employee 基类的所有10 个字段。

@Inheritance(strategy=InheritanceType.JOINED)
@Entity
public  abstract class Employee ...

@Entity
public class Manager


如果使用InheritanceType.JOINED,将为每个@Entity 子类创建附加表。

在此处了解不同的继承策略(单表、连接表、每类表):https://www.tutorialspoint.com/jpa/jpa_advanced_mappings.htm

【讨论】:

以上是关于Hibernate - 如何避免数据库中多个表的重复[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hibernate 创建视图?

hibernate错题解析

有啥方法可以让浏览器页面避免 Pyqt5 中的重定向?

如何避免 Hibernate ValidationException 上的自动实体更新

Hibernate映射知识要点

如何在hibernate中实现对两个表的查询数据?