7.1.4. MySQL 数据库特性
由于许可限制,MySQL JDBC 驱动程序不随 CUBA Studio 一起分发,因此应该执行以下操作:
-
从 https://dev.mysql.com/downloads/connector/j 下载驱动程序存档文件
-
解压缩 JAR 文件并将其重命名为
mysql-connector-java.jar
-
将 JAR 文件复制到
Program Files/Haulmont/CUBA Studio 2018.3/plugins/cuba-studio/lib/
目录以及已安装的 Tomcat 服务的lib
子目录 -
通过在命令行中执行
gradle --stop
停止 Gradle 守护进程,然后再次启动 Studio
对于不使用 UTF-8 字符集的数据库,不能执行框架中带有约束的数据脚本。此时需要修改数据库的 Charset 和 Collation name 属性,可以通过在项目属性的 Connection params 字段传递以下参数实现:
|
MySQL 不支持部分索引(partial indexes),因此为支持软删除的实体实现唯一约束的唯一方法是在索引中使用 DELETE_TS
列。但是还有另一个问题:MySQL 在具有唯一约束的列中允许存在多个 NULL 值。由于标准 DELETE_TS
列可以为 null,因此它不能在唯一索引中使用。建议使用以下变通方案为支持软删除的实体创建唯一约束:
-
在数据库表中创建一个
DELETE_TS_NN
列。此列不为空,并被初始化为默认值:create table DEMO_CUSTOMER ( ... DELETE_TS_NN datetime(3) not null default '1000-01-01 00:00:00.000', ... )
-
创建一个触发器,当更改
DELETE_TS
值时将更改DELETE_TS_NN
值: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)