Пользовательские типы данных (DataType)

В разделе приведены рекомендации по созданию пользовательских типов данных в проектах THESIS Studio. Используйте их как практическое руководство при настройке и сопровождении проекта.

В проектах может потребоваться создание пользовательских DataType. Общий порядок создания таких типов описан в документации CUBA.

Если пользовательский тип не является наследником стандартного DataType, для корректного формирования сценариев базы данных необходимо явно указать SQL-тип столбца. Это требуется для того, чтобы THESIS Studio могла корректно создавать сценарии базы данных для атрибутов с таким типом.

SQL-тип столбца задается с помощью аннотаций Ddl. Несколько аннотаций Ddl можно сгруппировать с помощью аннотации DdlByDbms.

Каждая аннотация Ddl определяет SQL-тип столбца для пары dbmsType и dbmsVersion, значения которых задаются свойствами cuba.dbmsType и cuba.dbmsVersion.

Так как ТЕЗИС поддерживает несколько типов СУБД, рекомендуется указывать аннотации как минимум для поддерживаемых вариантов Oracle, MS SQL Server и PostgreSQL. Например, если SQL-тип должен хранить строку длиной 1000–2000 символов, можно использовать следующий вариант:

// annotations to determine SQL types for DataType
@Ddl(dbms = "oracle-Thesis", value = "varchar2(2000)")
@Ddl(dbms = "mssql-Thesis", value = "varchar(max)")
@Ddl(dbms = "mssql-Thesis2012", value = "varchar(max)")
@Ddl(dbms = "postgres-Thesis", value = "text")

Если в проекте используется собственная версия СУБД, добавьте для нее отдельную аннотацию.

Если проект в дальнейшем может быть расширен, рекомендуется предусмотреть резервный вариант для случаев, когда в расширении будет добавлена другая версия СУБД. Для этого можно указать тип СУБД без версии:

// fallbacks for non 'Thesis' dbmsTypes
@Ddl(dbms = "oracle", value = "varchar2(2000)")
@Ddl(dbms = "mssql", value = "varchar(max)")
@Ddl(dbms = "postgres", value = "text")

Также можно указать значение по умолчанию для случая, когда в проекте используется иной тип СУБД:

@Ddl("varchar(2000)") // default value - used for non oracle\mssql\postgres DBMS

Аннотации рекомендуется указывать в порядке убывания точности:

  • сначала для типа и версии СУБД;

  • затем для типа СУБД без версии;

  • затем значение по умолчанию.

Для удобства аннотации можно сгруппировать по типам СУБД:

// oracle
@DdlByDbms({
        @Ddl(dbms = "oracle-Thesis", value = "varchar2(2000)"),
        @Ddl(dbms = "oracle", value = "varchar2(2000)")
})

// mssql
@DdlByDbms({
        @Ddl(dbms = "mssql-Thesis", value = "varchar(max)"),
        @Ddl(dbms = "mssql-Thesis2012", value = "varchar(max)"),
        @Ddl(dbms = "mssql", value = "varchar(max)")
})

// postgres
@DdlByDbms({
        @Ddl(dbms = "postgres-Thesis", value = "text"),
        @Ddl(dbms = "postgres", value = "text")
})

// default
@DdlByDbms({@Ddl("varchar(2000)")})