4.3.1. Типы СУБД

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