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。
-