4.3.1. Типы СУБД
Тип используемой СУБД определяется свойствами приложения cuba.dbmsType и (опционально) cuba.dbmsVersion, которые влияют на поведение механизмов, зависящих от типа базы данных.
Приложение обращается к БД через источник данных javax.sql.DataSource, который извлекается из JNDI по имени, заданному в свойстве приложения cuba.dataSourceJndiName (по умолчанию java:comp/env/jdbc/CubaDS). Конфигурация источника данных в случае стандартного развертывания задается в файле context.xml модуля core. Источник данных должен использовать JDBC-драйвер, соответствующий выбранной СУБД.
Платформа "из коробки" поддерживает следующие СУБД:
| 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  |  
    |
MySQL 5.6+  |  
    mysql  |  
    
Таблица ниже описывает рекомендованное соответствие типов данных между атрибутами сущностей в Java и колонками таблиц различных СУБД. Эти типы автоматически выбираются Studio при генерации скриптов создания и обновления БД, и для них гарантируется работоспособность всех механизмов платформы.
| Java | HSQL | PostgreSQL | MS SQL Server | Oracle | MySQL | 
|---|---|---|---|---|---|
UUID  |  
    varchar(36)  |  
    uuid  |  
    uniqueidentifier  |  
    varchar2(32)  |  
    varchar(32)  |  
   
Date  |  
    timestamp  |  
    timestamp  |  
    datetime  |  
    timestamp  |  
    datetime(3)  |  
   
java.sql.Date  |  
    timestamp  |  
    date  |  
    datetime  |  
    date  |  
    date  |  
   
java.sql.Time  |  
    timestamp  |  
    time  |  
    datetime  |  
    timestamp  |  
    time(3)  |  
   
BigDecimal  |  
    decimal(p, s)  |  
    decimal(p, s)  |  
    decimal(p, s)  |  
    number(p, s)  |  
    decimal(p, s)  |  
   
Double  |  
    double precision  |  
    double precision  |  
    double precision  |  
    float  |  
    double precision  |  
   
Long  |  
    bigint  |  
    bigint  |  
    bigint  |  
    number(19)  |  
    bigint  |  
   
Integer  |  
    integer  |  
    integer  |  
    integer  |  
    integer  |  
    integer  |  
   
Boolean  |  
    boolean  |  
    boolean  |  
    tinyint  |  
    char(1)  |  
    boolean  |  
   
String (limited)  |  
    varchar(n)  |  
    varchar(n)  |  
    varchar(n)  |  
    varchar2(n)  |  
    varchar(n)  |  
   
String (unlimited)  |  
    longvarchar  |  
    text  |  
    varchar(max)  |  
    clob  |  
    longtext  |  
   
byte[]  |  
    longvarbinary  |  
    bytea  |  
    image  |  
    blob  |  
    longblob  |  
   
Как правило, всю работу по преобразованию данных между БД и кодом Java выполняет слой ORM совместно с соответствующим JDBC драйвером. Это означает, что при работе с данными через методы EntityManager и запросы на JPQL никакой ручной конвертации выполнять не нужно - вы просто используете типы Java, перечисленные в левой колонке таблицы.
При использовании native SQL через EntityManager.createNativeQuery() или через QueryRunner для разных типов СУБД некоторые типы данных в Java коде будут отличаться от приведенных. В первую очередь это касается атрибутов типа UUID - только драйвер PostgreSQL возвращает значения соответствующих колонок в этом типе, для других серверов это будет String. Для обеспечения независимости кода от используемой СУБД рекомендуется конвертировать типы параметров и результатов запросов с помощью интерфейса DbTypeConverter.