Hibernate - 如何避免数据库中多个表的重复[重复]
Posted
技术标签:
【中文标题】Hibernate - 如何避免数据库中多个表的重复[重复]【英文标题】:Hibernate - How to avoid duplicates across multiple tables in database [duplicate] 【发布时间】:2019-11-06 15:28:48 【问题描述】:假设我有一个名为 Employee
的实体,它包含 10 列。我还有一些其他实体,例如 Manager
、Salesman
、Lawyer
和 HumanResource
。所有这些类都将继承自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 - 如何避免数据库中多个表的重复[重复]的主要内容,如果未能解决你的问题,请参考以下文章