如何将非规范化表映射到两个实体?

时间:2020-07-10 22:09:54

标签: hibernate jpa orm hibernate-mapping

我有一个非规范化的数据库表,其中包含员工及其所在部门:

EmployeeId EmployeeName DepartmentId DepartmentName
 1            Bob          1              HR
 2            Lisa         1              HR
 ...

DepartmentIdEmployeeId是复合主键。我无法更改数据库。我想将此映射到两个实体:

@Entity
@Data
class Employee {
   @Id
   @Column("employeeId")
   private int id;
   
   @Column("employeeName")
   private String name;

   @ManyToOne
   private Department department;
}

@Entity
@Data
class Department {
   @Id
   @Column("departmentId")
   private int id;
   
   @Column("departmentName")
   private String name;
}

但这不起作用。如何解决逻辑(对象)模型和数据库(物理)模型之间的阻抗不匹配?我已经看到一种hierarchical的方法来解决此问题,但是我认为这不适用于我的情况,因为Employee和Department没有任何层次关系。

1 个答案:

答案 0 :(得分:0)

一行只能代表一个Entity对象。一起重复的任何挫败的属性都可以视为Value对象。 Value对象的生命周期取决于实体对象的生命周期。当实体对象被删除时,值对象也随之消失。

即使采用分层方法,每一行也可以呈现不同的type书籍,但是一行仅代表一个实体。

因此您不能将它们表示为两个实体。