Тип используемой СУБД определяется свойствами приложения
cuba.dbmsType
и (опционально) cuba.dbmsVersion, а также настройкой источника данных javax.sql.DataSource, через который производится обращение к базе данных. Экземпляр источника данных извлекается из JNDI по имени, заданному в
свойстве приложения
cuba.dataSourceJndiName
. Конфигурационный файл для Tomcat, определяющий источник данных, описан в Раздел A.1, «context.xml»
Платформа "из коробки" поддерживает следующие СУБД:
| cuba.dbmsType | cuba.dbmsVersion | |
|---|---|---|
| HSQLDB | hsql | |
| PostgreSQL 8.4+ | postgres | |
| Microsoft SQL Server 2005, 2008 | mssql | |
| Microsoft SQL Server 2012+ | mssql | 2012 |
| Oracle Database 11g | oracle |
Таблица ниже описывает рекомендованное соответствие типов данных между атрибутами сущностей в Java и колонками таблиц различных СУБД. Эти типы автоматически выбираются Studio при генерации скриптов создания и обновления БД, и для них гарантируется работоспособность всех механизмов платформы.
| Java | HSQL | PostgreSQL | MS SQL Server | Oracle |
|---|---|---|---|---|
| UUID | varchar(36) | uuid | uniqueidentifier | varchar2(32) |
| Date | timestamp | timestamp | datetime | timestamp |
| java.sql.Date | timestamp | date | datetime | date |
| java.sql.Time | timestamp | time | datetime | timestamp |
| BigDecimal | decimal(p, s) | decimal(p, s) | decimal(p, s) | number(p, s) |
| Double | double precision | double precision | double precision | float |
| Long | bigint | bigint | bigint | number(19) |
| Integer | integer | integer | integer | integer |
| Boolean | boolean | boolean | tinyint | char(1) |
| String (limited) | varchar(n) | varchar(n) | varchar(n) | varchar2(n) |
| String (unlimited) | longvarchar | text | varchar(max) | clob |
| byte[] | longvarbinary | bytea | image | blob |
Как правило, всю работу по преобразованию данных между БД и кодом Java выполняет слой ORM совместно с соответствующим JDBC драйвером. Это означает, что при работе с данными через методы EntityManager и запросы на JPQL никакой ручной конвертации выполнять не нужно - вы просто используете типы Java, перечисленные в левой колонке таблицы.
При использовании native SQL через EntityManager.createNativeQuery() или через
QueryRunner
для разных типов СУБД некоторые типы данных в Java коде будут отличаться от приведенных. В первую очередь это касается атрибутов
типа UUID - только драйвер PostgreSQL возвращает значения соответствующих колонок в этом типе, для других серверов это будет String. Для обеспечения независимости кода от используемой СУБД рекомендуется конвертировать типы параметров и результатов запросов
с помощью интерфейса
DbTypeConverter
.

