Pas*_*ent 36
与Hibernate Criteria API一样,JPA 2.0 Criteria API特别适合动态构建查询,以处理查询结构因运行时条件而异的情况.
但还有更多.虽然比Hibernate的Criteria API更冗长,但JPA Criteria API允许构建类型安全查询(如果您使用Metamodel API).下面是一个例子:
EntityManager em = ...
QueryBuilder qb = em.getQueryBuilder();
CriteriaQuery<Person> c = qb.createQuery(Person.class);
Root<Person> p = c.from(Person.class);
Predicate condition = qb.gt(p.get(Person_.age), 20);
c.where(condition);
TypedQuery<Person> q = em.createQuery(c);
List<Person> result = q.getResultList();
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,以下内容会引发编译错误,例如:
Predicate condition = qb.gt(p.get(Person_.age, "xyz"));
Run Code Online (Sandbox Code Playgroud)
如果你想知道,Person_是静态的,实例化的,规范的元模型类对应于原始Person实体类(由注释处理器生成).它提供了基于运行时反射的方法的强类型替代方法:
Field field = Person.class.getField("age");
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
我觉得JPQL一般都比较舒服,但Criteria API的类型安全性与JPQL(以及Hibernate Criteria API)有很大的不同.
| 归档时间: |
|
| 查看次数: |
11740 次 |
| 最近记录: |