web-dev-qa-db-fra.com

Requête de clause IN du générateur de critères JPA

Comment écrire une requête de générateur de critères pour une requête JPQL donnée ci-dessous? J'utilise JPA 2.2.

SELECT * 
FROM Employee e
WHERE e.Parent IN ('John','Raj')
ORDER BY e.Parent
15
Raj

Cette configuration de critères devrait faire l'affaire:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Employee> q = cb.createQuery(Employee.class);


Root<Employee> root = q.from(Employee.class);
q.select(root);

List<String> parentList = Arrays.asList(new String[]{"John", "Raj"});

Expression<String> parentExpression = root.get(Employee_.Parent);
Predicate parentPredicate = parentExpression.in(parentList);
q.where(parentPredicate);
q.orderBy(cb.asc(root.get(Employee_.Parent));

q.getResultList();

J'ai utilisé ici la méthode surchargée CriteriaQuery.where qui accepte un prédicat Predicate .. un in dans ce cas.

34
Maciej Kowalski