条件 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.
关于使用标准 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.