在JPA中将多个表映射到单个实体

时间:2018-12-08 20:03:16

标签: java hibernate jpa spring-data-jpa entity

我正在尝试学习JPA / Hibernate,并且在这个领域我是真正的绿色。我通常会转弯并尝试一些事情,而对API并不了解。因此,我决定创建一个简单的实体,该实体从多个表中检索信息,因为使用JPA可以轻松实现该实体。这背后的原因是,假设,如果涉及的表每个都有几百列,而我们只需要检索很少的数据,并且我们只需要专注于检索,而不是插入/更新/删除,将假定最好只检索整个实体(特别是如果需要返回多行),然后跨其他实体将它们联接以派生几列。

我从两个简单的表开始:

EMPLOYEES
EMPLOYEE_ID, EMAIL, DEPARTMENT_ID, MANAGER_ID, FIRST_NAME, etc...

DEPARTMENTS
DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, etc...

我希望我的实体仅基于EMPLOYEES.EMPLOYEE_ID仅检索以下列:

EMPLOYEES.EMPLOYEE_ID
EMPLOYEES.MANAGER_ID
EMPLOYEES.DEPARTMENT_ID
DEPARTMENT.DEPARTMENT_NAME

这里要注意的一件事是EMPLOYEES.MANAGER_IDEMPLOYEES.EMPLOYEE_ID的自引用外键。

我可能会创建以下内容...

@SecondaryTable(name="DEPARTMENTS",
    pkJoinColumns=@PrimaryKeyJoinColumn(name="managerId",referencedColumnName="employeeId")
)
@Table(name="EMPLOYEES")
@Entity
public class EmployeesDepartment {

    @Id
    private String employeeId;

    private String managerId;

    private String email;

    private int departmentId;

    @Column(name="DEPARTMENT_NAME",table="DEPARTMENTS")
    private String departmentDesc;

// Setters and getters
}

显然,由于辅助表(DEPARTMENTS)之间的联接发生在其MANAGER_IDEMPLOYEES.EMPLOYEE_ID之间而不是{{ 1}}。

我无法将DEPARTMENTS.MANAGER_ID = EMPLOYEES.MANAGER_ID替换为referencedColumnName="employeeId",因为referencedColumnName="managerId"的managerId不是@Entity EmployeesDepartment的主键。

我不能执行以下操作:

EMPLOYEES

我的问题是,当查询的@OneToOne @JoinColumn(name="managerId",table="DEPARTMENTS",referencedColumnName="employeeId") private String managerId; 子句基于DEPARTMENTS.MANAGER_ID = EMPLOYEES.MANAGER_ID时,如何使我的联接位于WHERE上?换句话说,我如何拥有映射到以下查询的实体:

EMPLOYEES.EMPLOYEE.ID

或者有没有副作用更少的更好的解决方案,例如表更新,加载等的顺序?

0 个答案:

没有答案