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现在不止一次地访问数据库(需要进一步调查),以查看是否可以检索到第二级老板