我很好奇没有CriteriaQuery<T>#where(List<Predicate>)
。
我看到orderBy(List<Order>)
,multiselect(List<Selection<?>>)
和groupBy(List<Expression<?>>)
。
为什么没有where(List<Predicate>)
的方法?这有什么技术原因吗?
where(..)方法没有签名:where(List<Predicate>)
。从实现的角度来看,通常使用列表在内部存储谓词。对于方法where(Predicate ...)
,数组将转换为列表。所以where(List<Predicate>)
比where(Predicate ...)
更有效率。请求应提交给JPA规范。
您必须首先使用例如CriteriaBuilder
来创建标准谓词来创建CriteriaQuery
。当你得到`CriteriaQuery时,所有的谓词都在那里。
此外,CriteriaQuery中还有where
我不确定我是否正确地提出了你的问题,但是我使用了类似下面的代码并使用where
和谓词列表!
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery =criteriaBuilder.createQuery();
List<Predicate> predicates = new
ArrayList<Predicate>();
Predicate predicate = null;
predicate = criteriaBuilder.equal(path, value);
predicates.add(predicate);
criteriaQuery.where(predicates.toArray(new Predicate[]{}));