条件 API:使用条件 API 创建查询文档

Criteria API: Using the Criteria API to Create Queries documentation

关于使用标准 API 创建查询的文档,我有一个非常简单的问题:documentation

在 CriteriaBuilder 接口部分的表达式方法中,您可以阅读以下有关此部分中 and 方法的内容:Table 35-3 CriteriaBuilder 接口中的复合谓词方法 和方法使用示例:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.where(cb.equal(pet.get(Pet_.name), "Fido")
    .and(cb.equal(pet.get(Pet_.color), "brown"))

但实际上这是行不通的,因为在 where 方法之后你无法调用 .and()... 正确的用法是:

CriteriaQuery<BookEntity> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class); 
cq.where(cb.and(cb.equal(pet.get(Pet_.name), "Fido"), 
                cb.equal(pet.get(Pet_.color), "brown")));

这是为什么呢?也许有一些版本差异? 或者这可能只是文档中的一些错误,但在这种情况下,我将把它作为一个很好的使用示例。

Oracle "tutorial" 有多种错误,仅此而已。

JPA 标准的权威指南是 JPA 规范和 javadoc。除此之外,使用供应商自己的文档,因为他们应该都涵盖标准处理(以及他们自己的扩展,希望弄清楚什么是他们自己的扩展)。一个这样的例子是 this one from DataNucleus JPA.