4

我有一个用户类:

 @Entity
 public class User implements Serializable {
 //..
 @ElementCollection(fetch = FetchType.EAGER)
 Set<UserPrivs> privs;
 //..
 }

其中 UserPrivs - 枚举。

我想创建方法List<User> getUsersByPrivs(Set<UserPrivs> privs),它将返回包含所有权限的所有用户。

我怎样才能做到这一点?

4

3 回答 3

3

像这样使用 CriteriaBuilder?

List<User> getUsersByPrivs(Set<UserPrivs> privs) {
    EntityManager em = getEntityManager();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<User> cq = cb.createQuery(User.class);
    final Root<User> u = cq.from(User.class);
    List<Predicate> predicates = new ArrayList<>();
    for (UserPrivs priv : privs) {
        predicates.add(u.join("privs").in(Arrays.asList(priv)));
    }
    cq.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
    return em.createQuery(cq).getResultList();
}
于 2015-02-23T18:23:37.863 回答
1
Select u from User u join u.privs p where p.name in :privsNames

这是任意的,要获得所有,您需要加入 u.privs n 次并将它们组合在一起。

于 2012-11-12T15:04:08.233 回答
0

我希望这有帮助:

    String query = "select u from User u where 0=1 ";
    for (UserPrivs p : privs) {
        query += " or '" + p.name() + "' in u.privs";
    }
于 2012-11-12T10:36:27.770 回答