3.2.2.1. Интерфейсы метаданных
Рассмотрим основные интерфейсы метаданных.
 
  - Session
 -  
    
Точка входа в фреймворк метаданных. Позволяет получать экземпляры
MetaClassпо имени и по соответствующему классу Java. Обратите внимание на различие методовgetClass()иgetClassNN()- первые могут возвращатьnull, вторые нет (NonNull).Объект
Sessionможет быть получен через интерфейс инфраструктуры Metadata.Пример:
@Inject protected Metadata metadata; ... Session session = metadata.getSession(); MetaClass metaClass1 = session.getClassNN("sec$User"); MetaClass metaClass2 = session.getClassNN(User.class); assert metaClass1 == metaClass2; 
- MetaModel
 -  
    
Редко используемый интерфейс, служит для группировки мета-классов.
Группировка осуществляется по имени корневого Java пакета проекта, указываемого в файле metadata.xml.
 
- 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. Например, отношение заказа и пункта этого заказа −COMPOSITION, т.к. пункт не может существовать без заказа, которому он принадлежит.Вид ссылочного атрибута
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()– возвращаетtrueдля ссылочного атрибута типаASSOCIATIONилиCOMPOSITION -  
asClass()- возвращает мета-класс ассоциированной сущности для ссылочного атрибута -  
isOrdered()– возвращаетtrueесли атрибут представляет собой упорядоченную коллекцию (например,List) -  
getCardinality()– вид отношения для ссылочного атрибута:ONE_TO_ONE,MANY_TO_ONE,ONE_TO_MANY,MANY_TO_MANY 
 -