В разделе приведены рекомендации по созданию пользовательских типов данных в проектах 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)")})