Метаданные
Каждая сущность со своими атрибутами отражается в метаданных приложения, которые используются механизмами фреймворка для получения полной информации о модели данных. Например, если в метаданных какой-либо атрибут помечен как доступный только для чтения, соответствующие компоненты пользовательского интерфейса будут отключены.
| Метаданные являются внутренним механизмом фреймворка и редко используются непосредственно в коде приложения. См. раздел Ключевые возможности, в котором рассматриваются концепции метаданных в Jmix. | 
Основной точкой входа в API метаданных является бин Metadata. Он предоставляет доступ к информации о сущностях в виде объектов MetaClass и MetaProperty.
В приведенном ниже примере выведены сведения об атрибутах сущности Order:
@Autowired
private Metadata metadata;
public void printOrderProperties() {
    MetaClass metaClass = metadata.getClass(Order.class); (1)
    for (MetaProperty metaProperty : metaClass.getProperties()) { (2)
        String propertyName = metaProperty.getName(); (3)
        MetaProperty.Type propertyType = metaProperty.getType(); (4)
        Class<?> javaType = metaProperty.getJavaType(); (5)
        Range propertyRange = metaProperty.getRange(); (6)
        String info = "name: " + propertyName +
                "\n type: " + propertyType +
                "\n Java type: " + javaType +
                "\n range: " + propertyRange;
        if (propertyRange.isClass()) { (7)
            MetaClass refMetaClass = propertyRange.asClass(); (8)
            Range.Cardinality cardinality = propertyRange.getCardinality(); (9)
            info += "\n reference to: " + refMetaClass;
            info += "\n cardinality: " + cardinality;
        } else if (propertyRange.isEnum()) { (10)
            Enumeration<?> enumeration = propertyRange.asEnumeration(); (11)
            info += "\n enum: " + enumeration;
        } else if (propertyRange.isDatatype()) { (12)
            Datatype<Object> propertyDatatype = propertyRange.asDatatype(); (13)
            info += "\n data type: " + propertyDatatype;
        }
        System.out.println(info);
    }
}| 1 | Метод Metadata.getClass(javaClass)возвращает объектMetaClass, соответствующий классу сущности Java. | 
| 2 | Метод MetaClass.getProperties()возвращает коллекцию объектовMetaProperty, соответствующих всем атрибутам сущности. | 
| 3 | Метод MetaProperty.getName()возвращает имя атрибута сущности. | 
| 4 | Метод MetaProperty.getType()возвращает тип атрибута:DATATYPE,ENUM,ASSOCIATION,COMPOSITION. | 
| 5 | Метод MetaProperty.getJavaType()возвращает класс Java атрибута сущности. | 
| 6 | Метод MetaProperty.getRange()метод возвращает объектRange, который описывает целевой тип атрибута сущности. | 
| 7 | Метод Range.isClass()возвращает значение true, если атрибут сущности является ссылкой. | 
| 8 | Вы можете получить мета-класс ссылаемой сущности с помощью метода Range.asClass(). | 
| 9 | Метод Range.getCardinality()возвращает вид связи ссылочного атрибута:ONE_TO_ONE,MANY_TO_ONE,ONE_TO_MANY,MANY_TO_MANY. Вы также можете использоватьRange.getCardinality().isMany()чтобы определить, является ли атрибут коллекцией. | 
| 10 | Метод Range.isEnum()возвращает значение true, если атрибут сущности является перечислением. | 
| 11 | Метод Range.asEnumeration()метод возвращает объектEnumeration, который можно использовать для итерации по всем константам перечисления. | 
| 12 | Метод Range.isDatatype()возвращает значение true, если атрибут сущности не является ссылкой или перечислением. | 
| 13 | Метод Range.asDatatype()возвращает datatype атрибута сущности. Вы можете использовать его для форматирования и парсинга значений атрибутов. |