【问题标题】:JPA Entity with hierachy relationship具有层次关系的 JPA 实体
【发布时间】:2016-02-17 19:40:34
【问题描述】:

我有以下实体

@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;

使用此设置,我们必须手动维护 Lead 的上司和 Lead 的上司的上司的员工编号。了解 projectLead 员工后,这种关系 [在某种程度上] 已经可用:

员工实体如下:

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

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

【问题讨论】:

标签: sql jpa entity connect-by


【解决方案1】:

您可以将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();
}

【讨论】:

  • 好的,我得到 org.hibernate.LazyInitializationException: could not initialize proxy - no Session。我的查询是 select p from Project p left join fetch p.projectLead lead_emp_no left join p.projectLead.boss 同样,我正在尝试获取所有项目的列表,其中包含潜在客户、leadBosses 和leadBossesBoss 列
  • 所以我在@OneToOne 上使用 (fetch = FetchType.LAZY) 如果我删除它,那么我将获得第一级或老板,尽管如此,我认为 hibernate 正在访问数据库现在不止一次(需要调查更多),看看是否可以检索到第 2 级 Boss
猜你喜欢
  • 2020-12-07
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2019-12-31
  • 2012-09-29
相关资源
最近更新 更多