当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

JPA 2.0中的动态典范安全查询[Java编程]

赞助商链接



  本文“JPA 2.0中的动态典范安全查询[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

自从 JPA 于 2006 年初次被引入之后,它就得到了 Java 开辟社区的遍及支持.该标准的下一个主要更新 —— 2.0 版本 (JSR 317) —— 将在 2009 年年底完成.JPA 2.0 引入的关键特点之一就是 Criteria API,它为 Java 语言带来了一种独特的本领:开辟一种 Java 编译器可以在运行时考证其精确性的查询.Criteria API 还供应一个可以在运行时动态地构建查询的机制.

本文将介绍 Criteria API 和与之密切相关的 元模子(metamodel)概念.您将学习若何利用 Criteria API 开辟 Java 编译器可以查抄其精确性的查询,从而削减运行时错误,这种查询优于传统的基于字符串的 Java Persistence Query Language (JPQL) 查询.借助利用数据库函数或匹配模板实例的样例查询,我将演示编程式查询构造机制的强盛威力,并将其与利用预定义语法的 JPQL 查询举行比较.本文假定您具有底子的 Java 语言编程知识,并理解常见的 JPA 利用,比方 EntityManagerFactory 或 EntityManager.

JPQL 查询有什么缺陷?

JPA 1.0 引进了 JPQL,这是一种强盛的查询语言,它在很大程度上招致了 JPA 的风行.不过,基于字符串并利用有限语法的 JPQL 存在一些限制.要理解 JPQL 的主要限制之一,请查看清单 1 中的简单代码片段,它通过履行 JPQL 查询挑选年纪大于 20 岁的 Person 列表:

清单 1. 一个简单(并且错误)的 JPQL 查询

EntityManager em = ...;
String jpql = "select p from Person where p.age > 20";
Query query = em.createQuery(jpql);
List result = query.getResultList();

这个底子的例子显示了 JPA 1.0 中的查询履行模子的以下关键方面:

JPQL 查询被指定为一个 String(第 2 行).

EntityManager 是构造一个包含给定 JPQL 字符串的可履行 查询实例的工厂(第 3 行).

查询履行的后果包含无范例的 java.util.List 的元素.

但是这个简单的例子有一个考证的错误.该代码可以顺利通过编译,但将在运行时失利,因为该 JPQL 查询字符串的语法有误.清单 1 的第 2 行的精确语法为:

String jpql = "select p from Person p where p.age > 20";

不幸的是,Java 编译器不能发现此类错误.在运行时,该错误将呈目前第 3 或第 4 行(具体行数取决于 JPA 供应者能否在查询构造或履行期间按照 JPQL 语法解析 JPQL 字符串).

范例安全查询若何供应帮忙?

Criteria API 的最大上风之一就是禁止构造语法错误的查询.清单 2 利用 CriteriaQuery 接口重新编写了 清单 1 中的 JPQL 查询:

清单 2. 编写 CriteriaQuery 的基本步骤

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


  以上是“JPA 2.0中的动态典范安全查询[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • spring在MVC层办理JPA的缓迟加载问题
  • 操纵RSA V7.5中的UML-to-JPA转换加快JPA开辟
  • jpa抓取战略详解fetch(lazy ,eager)
  • 操纵JPA和Hibernate实现组合键
  • JPA 2.0中的动态典范安全查询
  • MyEclipse 6.0:整合JPA框架
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .