Java 查找具有多个角色的用户作为jpa标准

Java 查找具有多个角色的用户作为jpa标准,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我正在尝试查找具有以下所有已传递角色的所有用户: List<Mitarbeiter> findByRoles(Set<MitarbeiterRolle> roles) { EntityManager em = getEntityManager(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Mitarbeiter> cq = cb.createQuery(M

我正在尝试查找具有以下所有已传递角色的所有用户:

List<Mitarbeiter> findByRoles(Set<MitarbeiterRolle> roles) {

    EntityManager em = getEntityManager();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Mitarbeiter> cq = cb.createQuery(Mitarbeiter.class);
    Root<Mitarbeiter> mitarbeiter = cq.from(Mitarbeiter.class);

    List<Predicate> predicates = new ArrayList<>();
    for (MitarbeiterRolle role : roles) {
        Expression<MitarbeiterRolle> literal = cb.literal(role);
        predicates.add(literal.in(mitarbeiter.get("roles")));
    }
    cq.where(predicates.toArray(new Predicate[predicates.size()]));

    TypedQuery<Mitarbeiter> query = em.createQuery(cq);
    return query.getResultList();
}

你知道如何做到这一点吗?

cb.isMember做到了

default List<Mitarbeiter> findByRoles(Set<MitarbeiterRolle> roles) {

    EntityManager em = getEntityManager();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Mitarbeiter> cq = cb.createQuery(Mitarbeiter.class);
    Root<Mitarbeiter> mitarbeiter = cq.from(Mitarbeiter.class);

    List<Predicate> predicates = new ArrayList<>();
    for (MitarbeiterRolle role : roles) {
        predicates.add(cb.isMember(role, mitarbeiter.get("roles")));
    }
    cq.where(predicates.toArray(new Predicate[predicates.size()]));

    TypedQuery<Mitarbeiter> query = em.createQuery(cq);
    return query.getResultList();
}
默认列表findByRoles(设置角色){
EntityManager em=getEntityManager();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Mitarbeiter.class);
根mitarbeiter=cq.from(mitarbeiter.class);
列表谓词=新的ArrayList();
for(MitarbeiterRolle角色:角色){
add(cb.isMember(role,mitarbeiter.get(“roles”));
}
cq.where(predicates.toArray(新谓词[predicates.size()]);
TypedQuery=em.createQuery(cq);
返回query.getResultList();
}
2020-03-13 09:37:19 - WARN  - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42601
2020-03-13 09:37:19 - ERROR - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - FEHLER: Syntaxfehler bei ».«
default List<Mitarbeiter> findByRoles(Set<MitarbeiterRolle> roles) {

    EntityManager em = getEntityManager();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Mitarbeiter> cq = cb.createQuery(Mitarbeiter.class);
    Root<Mitarbeiter> mitarbeiter = cq.from(Mitarbeiter.class);

    List<Predicate> predicates = new ArrayList<>();
    for (MitarbeiterRolle role : roles) {
        predicates.add(cb.isMember(role, mitarbeiter.get("roles")));
    }
    cq.where(predicates.toArray(new Predicate[predicates.size()]));

    TypedQuery<Mitarbeiter> query = em.createQuery(cq);
    return query.getResultList();
}