JPA Criteria API IN выражение Список параметров

Есть ли возможность использовать список параметров в Criteria API .in выражении?

У меня есть что-то вроде этого:

    List<Long> list = new ArrayList<Long>();
    list.add((long)1);
    list.add((long)2);
    list.add((long)3);


CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Bewerbung> criteriaQuery = cb.createQuery(Bewerbung.class);
Root<Bewerbung> bewerbung = criteriaQuery.from(Bewerbung.class);

criteriaQuery.select(bewerbung).where(
cb.in(bewerbung.get(Bewerbung_.bewerberNummer)).value(list);

return em.createQuery(criteriaQuery).getResultList();

Выражение.value(list) не работает какvalue() ожидает параметр типа долго не список. В моем случае невозможно использовать подзапрос. Может кто-нибудь помочь мне в этом вопросе?

Ответы на вопрос(2)

Не нужно использоватьCriteriaBuilder#isTrue, Этого должно быть достаточно:

criteriaQuery.select(bewerbung)
             .where(bewerbung.get(Bewerbung_.bewerberNummer)
             .in(list));
 09 мая 2016 г., 22:13
@MiklosKrivan хорошо, оба должны работать, мне это кажется более понятным.
 10 мая 2016 г., 11:02
Я бы тоже так ожидал, но, к сожалению, используя EclipseLink 2.6.2 для ORM (я пробовал обе формулы), обертка isTrue () вызывает упомянутое исключение. Именно поэтому мои формулировки предложены. Так что теоретически «нет необходимости» но практически "не должен".
 09 мая 2016 г., 18:01
Вместо «нет необходимости» Я бы сказал, "не должен". По крайней мере, использовать EclipseLink 2.6.2 точно. Я проверил.
 10 мая 2016 г., 16:21
@MiklosKrivan придется проверить, спасибо за разъяснения.
 10 мая 2016 г., 17:00
@MiklosKrivan Вы можете поделиться своим стэкомpastebin или где-нибудь еще, если это возможно?
cb.isTrue(bewerbung.get(Bewerbung_.bewerberNummer).in(list));

должен сделать свое дело, AFAIK.

 28 февр. 2017 г., 10:38
большое спасибо @JBNizet
 user141434124 мая 2012 г., 11:21
Отлично, спасибо, это работает, но я использую Hibernate, и кажется, что Hibernate не поддерживает пустую коллекцию в качестве параметра javax.persistence.criteria.Expression & quot; in & quot; параметр метода. Увидетьlists.jboss.org/pipermail/hibernate-issues/2011-December/…
 24 мая 2012 г., 11:30
AFAIK, никто не поддерживает их. Возможно, вам следует замкнуть запрос в случае, если в качестве аргумента передан пустой список.
 09 мая 2016 г., 15:04
Я обнаружил, что это выражение (обернутое в isTrue) вызывает исключение PREDICATE_PASSED_TO_EVALUATION в EclipseLink 2.6.2, но без обертывания isTrue прекрасно работает как предикат в моем примере, вероятно, потому что & quot; в & quot; возвращается с объектом предиката.

Ваш ответ на вопрос