Java 为什么没有标准查询<;T>#where(List<;Predicate>;)?

Java 为什么没有标准查询<;T>#where(List<;Predicate>;)?,java,jpa,criteria-api,Java,Jpa,Criteria Api,我很好奇没有标准查询#where(List) 我看到orderBy(List),multiselect(List>) 为什么没有where(List)的方法?有什么技术原因吗?您必须首先使用egCriteriaBuilder来创建CriteriaQuery来构建条件谓词。当您获得'CriteriaQuery'时,所有谓词都已存在 此外,CriteriaQuery中还有where 我不确定我是否正确理解了你的问题,但我使用了下面的代码之类的东西,并将where与谓词列表一起使用 CriteriaB

我很好奇没有
标准查询#where(List)

我看到
orderBy(List)
multiselect(List>)


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

您必须首先使用eg
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[]{}));
CriteriaBuilder-CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery CriteriaQuery=criteriaBuilder.createQuery();
列表谓词=new
ArrayList();
谓词=null;
谓词=criteriaBuilder.equal(路径、值);
add(谓词);
where(predicates.toArray(新谓词[]{}));

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

我要求没有
where(List)
。我已经知道
where(谓词…
。为什么在这里问这个问题?更好、更符合逻辑的地方是JPA spec邮件列表,因为据称它们对各种缺失方法有一定的原因。理由可能是,即使是
where(Predicate…
方法也很少与多个
Predicate
一起使用,由于
谓词
通常使用
CriteriaBuilder.and()
/
CriteriaBuilder.or()
连接在一起(类似地,您使用
和/或
连接
JPQL
中的条件,而不是使用逗号分隔的列表与
选择
分组依据
,以及
排序依据