WEB开发网
开发学院软件开发Java JPA 2.0 中的动态类型安全查询 阅读

JPA 2.0 中的动态类型安全查询

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: publicinterfaceTypedQuery<T>extendsQuery{List<T>getResultList();}与对应的无类型超接口相反:publicinterfaceQuery{ListgetResultList();}很明显,TypedQuery 结

public interface TypedQuery<T> extends Query { 
       List<T> getResultList(); 
} 

与对应的无类型超接口相反:

public interface Query { 
List getResultList(); 
}

很明显,TypedQuery 结果具有相同的 Person.class 类型,该类型在构造输入 CriteriaQuery 时由 QueryBuilder 指定(第 3 行)。

在第 8 行中,当最终执行查询以获得结果列表时,携带的类型信息展示了其优势。得到的结果是带有类型的 Person 列表,从而使开发人员在遍历生成的元素时省去麻烦的强制类型转换(同时减少了 ClassCastException 运行时错误)。

现在归纳 清单 2 中的简单例子的基本方面:

CriteriaQuery 是一个查询表达式节点树。在传统的基于字符串的查询语言中,这些表达式节点用于指定查询子句,比如 FROM、WHERE 和 ORDER BY。图 2 显示了与查询相关的子句:

图 2. CriteriaQuery 封装了传统查询的子句
JPA 2.0 中的动态类型安全查询

图片看不清楚?请点击这里查看原图(大图)。

查询表达式被赋予泛型。一些典型的表达式是:

Root<T>,相当于一个 FROM 子句。

Predicate,其计算为布尔值 true 或 false(事实上,它被声明为 interface Predicate extends Expression<Boolean>)。

Path<T>,表示从 Root<?> 表达式导航到的持久化属性。Root<T> 是一个没有父类的特殊 Path<T>。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:JPA 动态 类型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接