2011-11-27 70 views
1

我在休眠 像@ManyToMany关系: Employee表多对多检索标准

public class Employee implements Serializable { 
    @ManyToMany(fetch = FetchType.EAGER) 
    @Fetch(FetchMode.SELECT) 
    @JoinTable(name = "employee_role", joinColumns = { @JoinColumn(name = "employee_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") }) 
    private Set<Role> roles = new HashSet<Role>(0); 
} 

表角色:

public class Role implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    @Column(name = "role_id", unique = true, nullable = false) 
    @Basic(fetch = FetchType.EAGER) 
    private long id; 
} 

如何让全体员工当角色被休眠有一个特定的值标准 或子查询

回答

0

的尝试JB Nizet的答案,并在表中返回多行不相同数量 解决方法是添加setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)

Criteria c = getCurrentSession().createCriteria(Employee.class,"employee"); 
c.createAlias("employee.roles", "role"); 
c.add(Restrictions.eq("role.id", id)); 
List<Employee> employeed = c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list(); 
3

如果我understan ð正确的,你想获得具有特定角色的所有员工。为什么要使用标准的API为这一点。 HQL更简单,可读:

​​

如果你真的想使用Criteria API,这里有云: