Ответ 1
Не нужно использовать CriteriaBuilder#isTrue
. Этого должно быть достаточно:
criteriaQuery.select(bewerbung)
.where(bewerbung.get(Bewerbung_.bewerberNummer)
.in(list));
Есть ли возможность использовать список параметров в API критериев. в выражении?
У меня есть что-то вроде этого:
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()
ожидает параметр типа long, а не список.
В моем случае невозможно использовать подзапрос.
Может ли кто-нибудь помочь мне по этой проблеме?
Не нужно использовать CriteriaBuilder#isTrue
. Этого должно быть достаточно:
criteriaQuery.select(bewerbung)
.where(bewerbung.get(Bewerbung_.bewerberNummer)
.in(list));
cb.isTrue(bewerbung.get(Bewerbung_.bewerberNummer).in(list));
должен сделать трюк, AFAIK.