基于this示例。我尝试使用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
}
我使用hibernate条件来编写我的选择请求。问题是,我只想要树中的高级经理,我需要他的下属的集合,他们也知道他们的经理和下属等。
Criteria crit = getCurrentSession().createCriteria(Employee.class, "employee");
crit.add(Restrictions.isNull("manager"))
crit.setResultTransformer(new AliasToBeanTransformer<Employee>(Employee.class));
结果是我要求的正确的员工(高层管理人员),但是下属的集合是空的,如果我尝试更改我的标准以在树的底部选择员工,则映射成功完成为了一切。如何更改我的代码以首先映射最高管理员。我知道我可以从底层开始并访问高层管理人员,但有更清洁的方法吗?
答案 0 :(得分:0)
经过几天的研究,我发现了问题
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
解决方案是更改我的结果的映射因为&#39;每行结果都是根实体的一个独特实例&#39;
{{1}}