为什么没有CriteriaQuery <t> #where(List <predicate>)?

时间:2018-09-10 06:22:41

标签: java jpa criteria-api

我很好奇没有CriteriaQuery<T>#where(List<Predicate>)

我看到了orderBy(List<Order>)multiselect(List<Selection<?>>)groupBy(List<Expression<?>>)

为什么where(List<Predicate>)没有方法?有什么技术原因吗?

3 个答案:

答案 0 :(得分:1)

where(..)方法没有签名:where(List<Predicate>)。从实现的角度来看,通常使用一个列表在内部存储谓词。对于方法where(Predicate ...),该数组将转换为list。因此where(List<Predicate>)where(Predicate ...)更有效率。请求应提交给JPA规范。

答案 1 :(得分:0)

您必须首先使用CriteriaBuilder构建标准谓词以创建CriteriaQuery。到您获得`CriteriaQuery时,所有谓词都存在。

此外,CriteriaQuery中还有where

https://docs.oracle.com/javaee/6/api/javax/persistence/criteria/CriteriaQuery.html#where(javax.persistence.criteria.Predicate...)

答案 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[]{}));