在现实世界中,哪些示例更适合使用JPA2 Criteria API?

在现实世界中,哪些示例更适合使用JPA2 Criteria API?,第1张

在现实世界中,哪些示例更适合使用JPA2 Criteria API?

与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();

在上面的代码段中,以下示例会引发编译错误:

Predicate condition = qb.gt(p.get(Person_.age, "xyz"));

如果您想知道,

Person_
静态的,实例化的,规范的元模型类,它
对应于原始
Person
实体类(由注释处理器生成)。它提供了一种强类型替代基于运行时反射的方法:

Field field = Person.class.getField("age");

优点:

  • 类型安全,编译时验证!
    • 禁止构造语法错误的查询。
    • 重构后可能引发编译错误。
    • 提供开箱即用的自动完成支持
  • 更适合动态查询。

缺点:

  • 更详细。
  • 可读性较差。

总的来说,我对JPQL感到更自在,但Criteria API的类型安全性与JPQL(以及Hibernate Criteria API)是一个主要区别。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5489527.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存