3.2.2.1. 元数据接口
以下是基本的元数据接口:
- 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
。
-