2017-05-04 59 views
0

我已经对本文档有一个很简单的问题,使用标准API创建查询:documentation标准API:使用标准API创建查询文档

在这里,你可以阅读CriteriaBuilder接口部分的表达方法以下有关and方法在这一部分:表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"))); 

那么这是为什么?也许有一些版本差异? 或者,也许这只是文档中的一些错误,但在这种情况下,我会留下这个用法的一个很好的例子。

+0

“教程”是错误的,并且还有其他错误。使用其中一个JPA提供商提供的文档,或者参考JPA规范 –

+0

谢谢你的回答尼尔!其实我必须在我的作业中使用这个API。我们无法使用任何供应商特定解决方案。但再次感谢。实际上,您是否知道这个Criteria-Api的指南或教程或文档,它没有错误,并且不仅提供供应商特定的解决方案? – F3R1

+0

JPA规范和javadocs是权威性指南。除此之外,这一个http://www.datanucleus.org:15080/products/accessplatform_5_1/jpa/query.html#criteria –

回答

1

Oracle“教程”有各种各样的错误,那不过是一个错误。

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

+0

谢谢你的回答! – F3R1

+0

你是否知道querydsl的任何教程或文档 – SpringUser