JPA 2.0 中的动态类型安全查询
2009-11-11 00:00:00 来源:WEB开发网其他一些需要注意的要点包括:
元模型 Person_.age 字段被声明为类型 javax.persistence.metamodel.SingularAttribute。SingularAttribute 是 JPA Metamodel API 中定义的接口之一,我将在下一小节描述它。SingularAttribute<Person, Integer> 的泛型参数表示该类声明原来的持久化属性和持久化属性本身的类型。
元模型类被注释为 @StaticMetamodel(domain.Person.class) 以将其标记为一个与原来的持久化 domain.Person 实体对应的元模型类。
Metamodel API
我将一个元模型类定义为一个持久化实体类的描述。就像 Reflection API 需要其他接口(比如 java.lang.reflect.Field 或 java.lang.reflect.Method )来描述 java.lang.Class 的组成一样,JPA Metamodel API 也需要其他接口(比如 SingularAttribute 和 PluralAttribute)来描述元模型类的类型及其属性。
图 3 显示了在 Metamodel API 中定义用于描述类型的接口:
图 3. Metamodel API 中的持久化类型的接口的层次结构
图 4 显示了在 Metamodel API 中定义用于描述属性的接口:
图 4. Metamodel API 中的持久化属性的接口的层次结构
JPA 的 Metamodel API 接口比 Java Reflection API 更加专业化。需要更细微的差别来表达关于持久化的丰富元信息。例如,Java Reflection API 将所有 Java 类型表示为 java.lang.Class。即没有通过独立的定义对概念进行区分,比如类、抽象类和接口。当然,您可以询问 Class 它是一个接口还是一个抽象类,但这与通过两个独立的定义表示接口和抽象类的差别不同。
更多精彩
赞助商链接