我很好奇没有CriteriaQuery<T>#where(List<Predicate>)
。
我看到了orderBy(List<Order>)
,multiselect(List<Selection<?>>)
和groupBy(List<Expression<?>>)
。
为什么where(List<Predicate>)
没有方法?有什么技术原因吗?
答案 0 :(得分:1)
where(..)方法没有签名:where(List<Predicate>)
。从实现的角度来看,通常使用一个列表在内部存储谓词。对于方法where(Predicate ...)
,该数组将转换为list。因此where(List<Predicate>)
比where(Predicate ...)
更有效率。请求应提交给JPA规范。
答案 1 :(得分:0)
您必须首先使用CriteriaBuilder
构建标准谓词以创建CriteriaQuery
。到您获得`CriteriaQuery时,所有谓词都存在。
此外,CriteriaQuery中还有where
答案 2 :(得分:0)
我不确定是否正确地回答了您的问题,但是我使用了类似下面的代码,并使用了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[]{}));