Hibernate JPA 多对一自连接关联级联,如何select top hierarchy and map children?

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

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

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

我使用休眠条件来编写我的 select 请求。问题是,我只想要树中的最高管理者,我需要他的下属的集合,他们也知道他们的经理和下属等。

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

我要求的结果是正确的员工(高层经理),但是下属集合是空的,如果我尝试更改我的标准以选择树底部的员工,则映射是成功地完成了一切。我如何更改我的代码以首先映射高层管理器。我知道我可以从底层开始接触高层管理人员,但是有没有更简洁的方法?

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

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

解决方案是更改我的结果的映射,因为 'Each row of results is a distinct instance of the root entity'

.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);