Тип используемой СУБД определяется свойствами приложения
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
.