以下のJPQLクエリの条件ビルダーAPIクエリを書く方法は?使っています JPA 2.2
。
SELECT *
FROM Employee e
WHERE e.Parent IN ('John','Raj')
ORDER BY e.Parent
この基準設定は、トリックを行う必要があります。
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();
この場合、Predicate
.. in
述語を受け入れるオーバーロードCriteriaQuery.where
メソッドを使用しました。
You can also do this with Criteria API In clause as below:
CriteriaBuilder cb =
entityManager.getCriteriaBuilder();
CriteriaQuery<Employee> cq =
cb.createQuery(Employee.class);
Root<Employee> root =
cq.from(Employee.class);
List<String> parentList =
Arrays.asList("John", "Raj" );
In<String> in =
cb.in(root.get(Employee_parent));
parentList.forEach(p -> in.value(p));
return entityManager
.createQuery(cq.select(root)
.where(in).orderBy(cb.asc(root.get(Employee_.Parent)))
.getResultList();
これとほとんどすべての可能な基準の例については、私のgithubをチェックしてください。