Ort*_*kni 12
所述标准 API是在JPA 2.0添加.根据Java Persistence wikibook:
Java Persistence Criteria API用于通过构造基于对象的查询定义对象来定义动态查询,而不是使用基于字符串的JPQL方法.
A CriteriaBuiler用于构建一个CriteriaQuery对象,然后用于执行查询,例如本例中的Java持久性wikibook:
// Query for a List of objects.
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
Root employee = criteriaQuery.from(Employee.class);
criteriaQuery.where(criteriaBuilder.greaterThan(employee.get("salary"), 100000));
Query query = entityManager.createQuery(criteriaQuery);
List<Employee> result = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
的Predicate类是标准API的一部分,并用于构造where子句.例如,在这个修改过的示例中,取自Java EE 7文档:
CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
Predicate predicate1 = cb.equal(pet.get(Pet_.name), "Fido");
Predicate predicate2 = cb.equal(pet.get(Pet_.color), "brown");
cq.where(predicate1.and(predicate2));
Run Code Online (Sandbox Code Playgroud)
该Specification接口由Spring Data JPA项目定义.根据以下博客文章,来自Oliver Gierke的Advanced Spring Data JPA - Specifications和Querydsl:
为了能够定义可重用的谓词,我们引入了规范接口,该接口源自Eric Evans的Domain Driven Desig一书中介绍的概念.可以定义规范,例如:
public static Specification<Customer> customerHasBirthday() {
return new Specification<Customer> {
public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) {
return cb.equal(root.get(Customer_.birthday), today);
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后用在一个JpaSpecificationExecutor.
List<Customer> customers = customerRepository.findAll(isLongTermCustomer());
Run Code Online (Sandbox Code Playgroud)
不是来自 API 文档,而是我所看到的:
Criteria是一个抽象的概念,种类的集合Predicates。CriteriaQuery有所有的Criteria集合为Predicates。
As Criteriais 复数形式Criterion可以说Predicate等于Criterion。
SpringSpecification旨在提供specification pattern在构造CriteriaQueries.
随时用 - 最好是 API- 文档纠正我。
| 归档时间: |
|
| 查看次数: |
4953 次 |
| 最近记录: |