为什么没有CriteriaQuery #WHERE(名单 )?

问题描述 投票:1回答:3

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

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

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

java jpa criteria-api
3个回答
1
投票

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


0
投票

您必须首先使用例如CriteriaBuilder来创建标准谓词来创建CriteriaQuery。当你得到`CriteriaQuery时,所有的谓词都在那里。

此外,CriteriaQuery中还有where

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


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[]{}));
© www.soinside.com 2019 - 2024. All rights reserved.