我有一个用户类:
@Entity
public class User implements Serializable {
//..
@ElementCollection(fetch = FetchType.EAGER)
Set<UserPrivs> privs;
//..
}
其中 UserPrivs - 枚举。
我想创建方法
List<User> getUsersByPrivs(Set<UserPrivs> privs)
,这将返回包含所有权限的所有用户。我怎样才能做到这一点?
最佳答案
像这样使用 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();
}
关于jpa - JPQL 集合查询中集合的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13342011/