В данном разделе описаны правила формирования значений аннотаций сущностей при создании объектов в THESIS Studio. Сведения предназначены для администратора или разработчика, выполняющего настройку и сопровождение проекта.
@EntityEntity
Имя сущности, задаваемое параметром name аннотации @Entity, формируется по шаблону:
${namespace}${separator}${className}
Где:
- namespace - пространство имен;
- separator - символ-разделитель. Если параметр плагина Generate entity name with underscore symbol имеет значение true, используется символ
_, иначе используется символ$; - className — имя класса сущности.
Например, если пространство имен проекта — dummy, то для сущности с классом MyDocument будет сформировано имя dummy$M@TableDocum@TableTablent.
@Table
Название таблицы, задаваемое параметром name аннотации @Table, формируется по шаблону:
${upperNamespace}_${upperUnderscoredClassName}.
Где:
- upperNamespace - пространство имен, преобразованное к верхнему регистру;
- upperUnderscoredClassName - имя класса сущности, преобразованное к верхнему регистру, с разделением слов символом подчеркивания.
Например, если пространство имен проекта — dummy, то для сущности с классом MyDocument будет сформировано название таблицы DUMM@PrimaryKeyJoinColumn**_MY_DOCUMENT**.
@PrimaryKeyJoinColumn
Аннотация @PrimaryKeyJoinColumn используется в иерархии наследования сущностей со стратегией JOIN. Значения ее параметров формируются следующим образом:
- referencedColumnName - имя столбца первичного ключа сущности иерархии.
- name - значение, сформированное по шаблону
${upperUnderscoredRootEntityClassName}_${referencedColumnName}.
Где upperUnderscoredRootEntityClassName — имя класса корневой сущности иерархии, преобразованное к верхнему регистру, с разделением слов символом подчеркивания..
Например, для карточек, документов, задач и карточек проекта всегда формируется аннотация:
@Pr@DiscriminatorValuemaryKeyJoinColumn(name = "CARD_ID",@DiscriminatorValuereferencedColumnName = "ID")
@DiscriminatorValue
Значение аннотации @DiscriminatorValue определяется с учетом типа столбца дискриминатора, заданного параметром discriminatorType аннотации @DiscriminatorColumn, и уже используемых значений дискриминаторов в иерархии сущностей.
Правила формирования значения зависят от типа дискриминатора:
-
CHAR. Выполняется поиск первого неиспользуемого символа, начиная с латинской буквы A. Найденный символ используется как значение дискриминатора новой сущности.
-
INTEGER. Определяется максимальное из используемых значений дискриминатора. Если оно больше 2000, используется значение, увеличенное на 100. В остальных случаях используется значение 2000. Таким образом, начальное значение целочисленного дискриминатора для иерархии сущностей в проекте расширения равно 2000.
-
STRING. Логика зависит от длины значения дискриминатора, заданной параметром length аннотации
@DiscriminatorColumn:-
если допустимой длины достаточно для имени сущности, заданного параметром name аннотации
@Entity, используется имя сущности; -
если допустимой длины недостаточно, проверяется возможность использовать имя класса сущности;
-
если имя класса сущности не превышает допустимую длину и не используется в иерархии, оно применяется как значение дискриминатора;
-
если имя класса использовать нельзя, формируется случайная последовательность символов допустимой длины.
-
-
Если аннотация
@DiscriminatorColumnв сущности отсутствует, по умолчанию используется значение STRING[31]. В этом случае:-
если длина значения дискриминатора родительской сущности меньше 5, формируется случайная последовательность символов такой же длины. Последовательность проверяется на уникальность в иерархии и при совпадении формируется повторно;
-
если длина значения дискриминатора родительской сущности больше 5, в качестве значения дискриминатора используется имя сущности.
-
Важно!
Если в качестве значения дискриминатора используется имя сущности, необходимо самостоятельно проверить допустимость такого значения и при необходимости скорректировать его.