8.4. Особенности MySQL
JDBC-драйвер MySQL не распространяется в составе CUBA Studio в связи с его лицензией, поэтому его нужно установить отдельно:
-
Загрузите архив с драйвером со страницы https://dev.mysql.com/downloads/connector/j
-
Извлеките JAR-файл и переименуйте его в
mysql-connector-java.jar
-
Положите JAR-файл в каталог
~/.haulmont/studio/lib/
и в подкаталог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)