7.4. Особенности MySQL
JDBC-драйвер MySQL не распространяется в составе CUBA Studio в связи с его лицензией. Поэтому следует загрузить архив с драйвером со страницы https://dev.mysql.com/downloads/connector/j, извлечь JAR-файл, переименовать его в mysql-connector-java-5.1.38.jar
и положить в подкаталог lib
Studio и подкаталог lib
установленного сервера Tomcat. После этого необходимо остановить Studio, остановить демона Gradle, выполнив в командной строке gradle --stop
, а затем снова запустить Studio.
MySQL не поддерживает частичные (partial) индексы, поэтому единственная возможность создать ограничение уникальности для soft deleted сущности - это использовать в составе индекса колонку DELETE_TS
. Однако, существует другая проблема: MySQL позволяет иметь несколько NULLs в колонке с ограничением уникальности. Так как стандартная колонка DELETE_TS
является nullable, она не может быть использована в уникальном индексе. Рекомендуется следующий способ создания уникальных ограничений для сущностей с мягким удалением:
-
Создайте в таблице колонку
DELETE_TS_NN
с параметром not null и значением по умолчанию:create table DEMO_CUSTOMER ( ... DELETE_TS_NN datetime(3) not null default '1000-01-01 00:00:00.000', ... )
-
Создайте триггер, изменяющий
DELETE_TS_NN
когда меняетсяDELETE_TS
:create trigger DEMO_CUSTOMER_DELETE_TS_NN_TRIGGER before update on DEMO_CUSTOMER for each row if not(NEW.DELETE_TS <=> OLD.DELETE_TS) then set NEW.DELETE_TS_NN = if (NEW.DELETE_TS is null, '1000-01-01 00:00:00.000', NEW.DELETE_TS); end if
-
Создайте уникальный индекс, включающий в себя уникальные колонки и
DELETE_TS_NN
:create unique index IDX_DEMO_CUSTOMER_UNIQ_NAME on DEMO_CUSTOMER (NAME, DELETE_TS_NN)