jpa - JPQL 集合查询中集合的所有元素

标签 jpa jpql

我有一个用户类:

 @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/

相关文章:

mysql - JPQL JOIN查询对应值的行数(针对多列)

java - JPA 获取子类的集合

java - 连接失败的 JPQL createNativeQuery

hibernate - 当我有@ManyToMany 时如何设置外键名称

java - Jpa 2.0 - EntityManager.find(My Entity.class,PAK)需要将鉴别器值填充到键

java - 使用 jpa 从 postgres 读取 byte[] 时长度几乎翻倍

JPQL,删除时间戳早于 1 天的值

java - JPA 非主键字段自动递增

java - 在Spring boot应用程序中动态创建模式

java - spring JPA查询与spel表达式随机