26

是否可以在 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()它需要一个 long 类型的参数而不是一个列表。就我而言,不可能使用子查询。谁能帮我解决这个问题?

4

2 回答 2

37

无需使用CriteriaBuilder#isTrue. 这应该足够了:

criteriaQuery.select(bewerbung)
             .where(bewerbung.get(Bewerbung_.bewerberNummer)
             .in(list));
于 2012-10-30T18:23:54.850 回答
34
cb.isTrue(bewerbung.get(Bewerbung_.bewerberNummer).in(list));

应该做的伎俩,AFAIK。

于 2012-05-24T07:56:41.300 回答