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

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

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 现在将一组严格的可相互引用的类称为运行时作用域,而在 JPA 1.0 中称为持久化单元,JPA 2.0 中的动态类型安全查询(10),持久化单元作用域的持久化实体在 META-INF/persistence.xml 文件的 <class> 子句中枚举,在 JPA 2.0 中,最重要的

现在将一组严格的可相互引用的类称为运行时作用域,而在 JPA 1.0 中称为持久化单元。持久化单元作用域的持久化实体在 META-INF/persistence.xml 文件的 <class> 子句中枚举。在 JPA 2.0 中,通过 javax.persistence.metamodel.Metamodel 接口让开发人员可以在运行时使用作用域。Metamodel 接口是特定持久化单元知道的所有持久化实体的容器,如图 5 所示:


图 5. 元模型接口是持久化单元中的类型的容器
JPA 2.0 中的动态类型安全查询

这个接口允许通过元模型元素的对应持久化实体类访问元模型元素。例如,要获得对 Person 持久化实体的持久化元数据的引用,可以编写:

EntityManagerFactory emf = ...; 
Metamodel metamodel = emf.getMetamodel(); 
EntityType<Person> pClass = metamodel.entity(Person.class); 

这是一个用类的名称通过 ClassLoader 获得 Class 的类比:

ClassLoader classloader = Thread.currentThread().getContextClassLoader(); 
Class<?> clazz = classloader.loadClass("domain.Person"); 

可以在运行时浏览 EntityType<Person> 获得在 Person 实体中声明的持久化属性。如果应用程序在 pClass(比如 pClass.getSingularAttribute("age", Integer.class))上调用一个方法,它将返回一个 SingularAttribute<Person, Integer> 实例,该实例与实例化规范元模型类的静态 Person_.age 成员相同。最重要的是,对于应用程序可以通过 Metamodel API 在运行时引用的属性,是通过实例化静态规范元模型 Person_ 类向 Java 编译器提供的。

上一页  5 6 7 8 9 10 

Tags:JPA 动态 类型

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