我有一个非规范化的数据库表,其中包含员工及其所在部门:
EmployeeId EmployeeName DepartmentId DepartmentName
1 Bob 1 HR
2 Lisa 1 HR
...
DepartmentId
和EmployeeId
是复合主键。我无法更改数据库。我想将此映射到两个实体:
@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没有任何层次关系。
答案 0 :(得分:0)
一行只能代表一个Entity
对象。一起重复的任何挫败的属性都可以视为Value
对象。 Value
对象的生命周期取决于实体对象的生命周期。当实体对象被删除时,值对象也随之消失。
即使采用分层方法,每一行也可以呈现不同的type
书籍,但是一行仅代表一个实体。
因此您不能将它们表示为两个实体。