Выберите ... в эквиваленте в критериях JPA2 - PullRequest
4 голосов
/ 18 апреля 2011

Есть ли способ выполнить запрос, подобный следующему, используя API критериев JPA2?

select a from b where a in (1, 2, 3, 4)

Есть способ сделать это с помощью простого Hibernate, но мы не можем найти ничего подобного в JPA2.

1 Ответ

7 голосов
/ 19 апреля 2011

Да JPA 2 Critera поддерживает возврат определенного поля из сущности и использование предложения where, которое включает предложение in. Ниже приведен пример, который берет JPQL и преобразует его в аналогичный параметр на основе критериев JPA 2.

JPQL:

select b.a from B b where a in (1, 2, 3, 4)

Критерии:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
// assuming a is an Integer  
// if returning multiple fields, look into using a Tuple 
//    or specifying the return type as an Object or Object[]
CriteriaQuery<Integer.class> query = criteriaBuilder.createQuery(Integer.class);
Root<B.class> from = query.from(Bean.class);
query.select(from.get("a"))
     .where(from.get("a").in(1, 2, 3, 4));

// create query and execute...
...  

Вот несколько ссылок, которые дают дополнительные примеры использования in:

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...