3.2.2.1. 元数据接口
以下是基本的元数据接口:
Figure 9. 元数据框架接口
- Session
元数据框架的入口点。允许按名称或相应的 Java 类获取MetaClass
实例。注意方法的不同:getClass()
方法可以返回null
而getClassNN()
(NotNull)方法不能。
可以使用元数据基础接口获得Session
对象。
示例:
@Inject
protected Metadata metadata;
...
Session session = metadata.getSession();
MetaClass metaClass1 = session.getClassNN("sec$User");
MetaClass metaClass2 = session.getClassNN(User.class);
assert metaClass1 == metaClass2;
- MetaModel
很少使用的接口,用于对元类进行分组。
元类按照 metadata.xml 文件中指定的 Java 项目包的根名称进行分组。
- MetaClass
实体类元数据接口。MetaClass
始终与它所代表的 Java 类相关联。
基本方法:
-getName()
– 实体名称,根据惯例,在$
符号之前名称的第一部分是项目命名空间代码,例如sales$Customer
。
-getProperties()
– 元属性列表(MetaProperty
)。
-getProperty()
、getPropertyNN()
– 按名称返回元属性。如果没有与提供的名称对应的属性,则第一个方法返回null
,第二个方法抛出异常。
示例:MetaClass userClass = session.getClassNN(User.class);
MetaProperty groupProperty = userClass.getPropertyNN("group");
-getPropertyPath()
– 允许通过引用进行属性遍历。此方法接收属性路径参数 - 以点分隔的属性名字符串。方法返回MetaPropertyPath
对象,可通过调用此对象的getMetaProperty()
方法访问所需的(路径中的最后一个)属性。
示例:MetaClass userClass = session.getClassNN(User.class);
MetaProperty groupNameProp = userClass.getPropertyPath("group.name").getMetaProperty();
assert groupNameProp.getDomain().getName().equals("sec$Group");
-getJavaClass()
– 对应于这个MetaClass
的实体类。
-getAnnotations()
– 元注解集合。
- MetaProperty
实体属性元数据接口。
基本方法:
-getName()
– 属性名,对应于实体属性名。
-getDomain()
– 拥有这个属性的元类。
getType()
- 属性类型:
简单类型:
DATATYPE
枚举:
ENUM
两种引用类型:
-
ASSOCIATION - 关联
− 简单引用另一个实体。例如,订单 - 客户的关系就是一种关联关系。
-
COMPOSITION - 组合
− 引用一个实体,这个实体在脱离拥有它的实体时会失去实际意义。COMPOSITION
被认为是一种比 ASSOCIATION
更紧密的关系。例如,Order 和它的 Items 之间的关系是一个 COMPOSITION
,因为如果没有 Item 所属的 Order,Item 就不能存在。
引用属性的 ASSOCIATION
或 COMPOSITION
类型影响实体编辑模式:在第一种情况下,相关实体独立地持久化到数据库,在第二种情况下,相关实体仅与父实体一起持久化。有关详细信息,请参阅组合结构。
getRange()
–Range
接口提供属性类型的详细描述。isMandatory()
– 表示必须属性。例如,可视化组件以此来提示用户必须输入值。isReadOnly()
– 表示只读属性。getInverse()
– 对于引用类型的属性,返回关联另一侧的元属性(如果存在)。getAnnotatedElement()
– 对应于实体属性的字段(java.lang.reflect.Field
)或方法(java.lang.reflect.Method
)。getJavaType()
– 实体属性的 Java 类。可以是相应字段的类型,也可以是相应方法的返回值的类型。getDeclaringClass()
– 包含这个属性的 Java 类。
- Range
详细描述实体属性类型的接口。
基本方法:
-isDatatype()
– 如果是简单类型属性则返回true
。
-asDatatype()
– 对于简单类型属性返回对应的Datatype实例。
-isEnum()
– 如果是枚举类型返回true
。
-asEnumeration()
– 对于枚举类型属性返回Enumeration实例。
-isClass()
– 如果是ASSOCIATION
或COMPOSITION
类型属性,则返回true
。
-asClass()
– 对于引用属性返回关联实体的元类。
-isOrdered()
– 如果属性由有序集合(例如List
)表示,则返回true
。
-getCardinality()
– 引用属性的关系类型:ONE_TO_ONE
、MANY_TO_ONE
、ONE_TO_MANY
、MANY_TO_MANY
。