web-dev-qa-db-ja.com

JPA Criteria BuilderのIN句クエリ

以下のJPQLクエリの条件ビルダーAPIクエリを書く方法は?使っています JPA 2.2

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

この基準設定は、トリックを行う必要があります。

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メソッドを使用しました。

34
Maciej Kowalski
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をチェックしてください。

https://github.com/vaneetkataria/Jpa-Hibernate/blob/master/jdbcToJpaMigration/src/test/Java/com/katariasoft/technologies/jpaHibernate/entity/criteria/SingleTableCriteriaFetchTests.Java

0
Vaneet Kataria