5.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
-