繁体   English   中英

Hibernate JPA多对一自联接关联级联,如何选择顶层层次结构并映射子级?

[英]Hibernate JPA many-to-one self-join association cascade, how to select the top hierarchy and map children?

基于示例。 我尝试使用Hibernate和JPA注释将Employee映射到他的经理。

表员工

@Entity
@Table(name="EMPLOYEE")
public class Employee {

    @Id
    @Column(name="EMPLOYEE_ID")
    @GeneratedValue
    private Long employeeId;

    @Column(name="FIRSTNAME")
    private String firstname;

    @Column(name="LASTNAME")
    private String lastname;

    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="manager_id")
    private Employee manager;

    @OneToMany(mappedBy="manager")
    private Set<Employee> subordinates = new HashSet<Employee>();

    public Employee() {
    }

    public Employee(String firstname, String lastname) {
        this.firstname = firstname;
        this.lastname = lastname;
    }

    // Getter and Setter methods
}

我使用休眠条件来编写我的选择请求。 事实是,我只想要树上的最高经理,我需要他的下属的集合,他们也知道他们的经理和下属等。

Criteria crit = getCurrentSession().createCriteria(Employee.class, "employee");
crit.add(Restrictions.isNull("manager"))
crit.setResultTransformer(new AliasToBeanTransformer<Employee>(Employee.class));

结果是我所要求的正确的Employee(最高管理者),但下属组为空,并且如果我尝试更改标准以在树的底部选择一名雇员,则映射成功完成。 首先如何更改代码以映射最高经理。 我知道我可以从底层开始,然后访问高层经理,但是有没有更清洁的方法?

经过几天的研究,我发现了问题

.setResultTransformer(new AliasToBeanTransformer<Employee>(Employee.class));

解决方案是更改我的结果上的映射,因为“结果的每一行都是根实体的不同实例”

.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM