Sql 具有层次关系的JPA实体

Sql 具有层次关系的JPA实体,sql,jpa,entity,connect-by,Sql,Jpa,Entity,Connect By,我有以下实体 @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") pr

我有以下实体

@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;
使用此设置,我们必须手动维护领导上司和领导上司上司的员工编号。在了解projectLead员工的情况下,此关系[在某种程度上]已经可用:

员工实体如下所示:

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

是否可以让我的项目实体基于projectLead连接到boss和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();
}

请看这里:好的,我得到org.hibernate.LazyInitializationException:无法初始化代理-没有会话。我的查询是select p from Project p left join fetch p.projectLead\u emp\u no left join p.projectLead.boss再次,我正在尝试获取所有项目的列表,其中包含我在@OneTONE上使用的列lead、LEADBOSS和LEADBOSSOSSSO(fetch=FETCHTTYPE.LAZY),如果我删除它,那么我将获得第一级或boss,al beit,我认为hibernate现在不止一次地访问数据库(需要进一步调查),以查看是否可以检索到第二级老板