3.2.2.4. 元注解

实体元注解是一组提供有关实体的附加信息的键值对(key-value)。 使用元类getAnnotations() 方法访问元注解。 元注解的来源是:

  • @OnDelete@OnDeleteInverse@Extends 注解。通过这些注解将创建描述实体之间关系的特殊元注解。

  • 可扩展的元注解用 @MetaAnnotation 标明。这些注解会转换成元注解,key 是注解对应的 Java 类的全名称,value 是一组注解属性的映射。比如,@TrackEditScreenHistory 注解的 value 就是一个单一的映射:value → true。平台提供几个这种类型的注解:@NamePattern, @SystemLevel, @EnableRestore, @TrackEditScreenHistory。在应用程序或者应用程序组件中,可以创建自定义的注解类然后使用 @MetaAnnotation 对自定义注解类进行标注。

  • 可选:实体元注解也可以在metadata.xml文件中定义。如果 XML 中的元注解与 Java 实体类注解创建的元注解具有相同的名称,那么它将覆盖后者。

    下面的示例演示了如何通过 metadata.xml 中的元注解覆盖 Java 类中的注解:

    1. <metadata xmlns="http://schemas.haulmont.com/cuba/metadata.xsd">
    2. <!-- ... -->
    3. <annotations>
    4. <entity class="com.company.customers.entity.Customer">
    5. <annotation name="com.haulmont.cuba.core.entity.annotation.TrackEditScreenHistory">
    6. <attribute name="value" value="true" datatype="boolean"/>
    7. </annotation>
    8. <property name="name">
    9. <annotation name="length" value="200"/>
    10. </property>
    11. <property name="customerGroup">
    12. <annotation name="com.haulmont.cuba.core.entity.annotation.Lookup">
    13. <attribute name="type" class="com.haulmont.cuba.core.entity.annotation.LookupType" value="DROPDOWN"/>
    14. <attribute name="actions" datatype="string">
    15. <value>lookup</value>
    16. <value>open</value>
    17. </attribute>
    18. </annotation>
    19. </property>
    20. </entity>
    21. <entity class="com.company.customers.entity.CustomerGroup">
    22. <annotation name="com.haulmont.cuba.core.entity.annotation.EnableRestore">
    23. <attribute name="value" value="false" datatype="boolean"/>
    24. </annotation>
    25. </entity>
    26. </annotations>
    27. </metadata>