5.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 | JDBC driver | |
|---|---|---|---|
| HSQLDB | hsql | org.hsqldb.jdbc.JDBCDriver | |
| PostgreSQL 8.4+ | postgres | org.postgresql.Driver | |
| Microsoft SQL Server 2005 | mssql | 2005 | net.sourceforge.jtds.jdbc.Driver | 
| Microsoft SQL Server 2008 | mssql | com.microsoft.sqlserver.jdbc.SQLServerDriver | |
| Microsoft SQL Server 2012+ | mssql | 2012 | com.microsoft.sqlserver.jdbc.SQLServerDriver | 
| Oracle Database 11g+ | oracle | oracle.jdbc.OracleDriver | |
| MySQL 5.6+ | mysql | com.mysql.jdbc.Driver | 
Таблица ниже описывает рекомендованное соответствие типов данных между атрибутами сущностей в 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.