具有层次结构关系的 JPA 实体

JPA Entity with hierachy relationship

我有以下实体

@Entity 
public class Project implements Serializable { 
    @Id
    private Integer project_id;
    private String project_name;
    other attributes

    @OneToOne
    @JoinColumn(name = "lead_emp_no", referencedColumnName = "emp_no")
    private Employee projectLead;

    //  but the following two relationships need to be a connect by:
    @OneToOne
    @JoinColumn(name = "lead_boss_emp_no", referencedColumnName = "emp_no")
    private Employee projectLeadBoss;

    @OneToOne
    @JoinColumn(name = "lead_bosses_boss_emp_no", referencedColumnName = "emp_no")
    private Employee projectLeadBossesBoss;

使用此设置,我们必须手动维护潜在客户的老板和潜在客户的老板的老板的员工编号。了解项目负责人员工后,这种关系[在某种程度上]已经可用:

员工实体如下:

  @Entity
  public class Employee implements Serializable {
  @Id
  private Integer emp_no;
  private Integer bosses_emp_no;

是否可以让我的项目实体连接到基于projectLead 的boss 和bosses Employee?在单个查询中,我想获得所有项目及其领导层次结构的 table。我对实体重新设计持开放态度。

您可以将 Employee 中的 bosses_emp_no 替换为更有用的 boss:

@Entity
public class Employee implements Serializable {

    @Id
    private Integer emp_no;

    @OneToOne
    @JoinColumn(name = "boss_emp_no", referencedColumnName = "emp_no")
    private Employee boss;

然后您只需向 Project

添加几个委托方法
public Employee getProjectLeadBoss() {
    return this.projectLead.getBoss();
}

public Employee getProjectLeadBossesBoss() {
    return this.getProjectLeadBoss().getBoss();
}