[英]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.