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();
}