使用ParameterExpression作为In子句的一部分

我想使用参数表达式作为in子句的一部分。 我想查询一个包含一组条形图中的条形图的Foo列表。 这可能吗?

Foo // Join, ManyToOne Bar getBar() Query ParameterExpression barParameter; void setup() { CriteriaBuilder builder = ... CriteriaQuery criteria = ... Root root = ... barParameter = builder.parameter(???); criteria.where( builder.in(root.get(Foo_.bar)).value(barParameter) ); } List query(Set bars) { TypedQuery query = createQuery(); query.setParameter(barParameter, bars); return query.getResultList(); } 

in表达式中,您只能使用原始比较类型,因此您需要进行连接并比较基本类型的字段(这里我使用了Integer id ):

 Root foo = cq.from(Foo.class); Join bar = foo.join(Foo_.bar); ParameterExpression bars = cb.parameter(Collection.class); cq.where(bar.get(Bar_.id).in(bars)); TypedQuery tq = em.createQuery(cq); Collection barsParameter = new ArrayList (); barsParameter.add(1); List resultList = tq.setParameter(bars, barsParameter).getResultList();