A.6. metadata.xml

Файлы данного типа используются для регистрации кастомных типов данных и неперсистентных сущностей, и для задания мета-аннотаций.

Схема XML доступна по адресу http://schemas.haulmont.com/cuba/6.10/metadata.xsd.

Расположение файла metadata.xml задается в свойстве приложения cuba.metadataConfig.

Рассмотрим структуру файла.

metadata - корневой элемент.

Элементы metadata:

  • datatypes - опциональный описатель кастомных типов данных.

    Элементы datatypes:

    • datatype - описатель типа данных. Имеет следующие атрибуты:

      • id - идентификатор, используемый для ссылки на данный тип из аннотации @MetaProperty.

      • class - задает класс имплементации.

      • sqlType - необязательный атрибут, задающий SQL-тип базы данных, подходящий для хранения значений данного типа. SQL-тип используется в Studio при генерации скриптов для БД. Подробнее см. Пример специализированного Datatype.

      Элемент datatype может также содержать другие атрибуты, зависящие от конкретного класса реализации Datatype.

Должен иметь атрибут class, задающий класс реализации. Другие атрибуты опциональны и зависят от реализации. См. Пример специализированного Datatype.

  • metadata-model - описатель метамодели проекта.

    Атрибуты metadata-model:

    • root-package - корневой пакет проекта.

      Элементы metadata-model:

    • class - класс неперсистентной сущности.

  • annotations - корень элементов присвоения мета-аннотаций сущностей.

    Элемент annotations содержит список элементов entity, которые определяют сущности, для которых задаются мета-аннотации. Каждый элемент entity должен содержать атрибут class, который задает класс сущности, и список элементов annotation.

    Элемент annotation определяет мета-аннотацию. Он имеет атрибут name, соответствующий имени мета-аннотации. Мэп атрибутов мета-аннотации задается списком вложенных элементов attribute.

Пример:

<metadata xmlns="http://schemas.haulmont.com/cuba/metadata.xsd">

    <metadata-model root-package="com.sample.sales">
        <class>com.sample.sales.entity.SomeNonPersistentEntity</class>
        <class>com.sample.sales.entity.OtherNonPersistentEntity</class>
    </metadata-model>

    <annotations>
        <entity class="com.haulmont.cuba.security.entity.User">
            <annotation name="com.haulmont.cuba.core.entity.annotation.TrackEditScreenHistory">
                <attribute name="value" value="true" datatype="boolean"/>
            </annotation>

            <annotation name="com.haulmont.cuba.core.entity.annotation.EnableRestore">
                <attribute name="value" value="true" datatype="boolean"/>
            </annotation>
        </entity>

        <entity class="com.haulmont.cuba.core.entity.Category">
            <annotation name="com.haulmont.cuba.core.entity.annotation.SystemLevel">
                <attribute name="value" value="false" datatype="boolean"/>
            </annotation>
        </entity>
    </annotations>

</metadata>