我正在使用 Envers 扩展具有审计支持的现有应用程序。我注释了所有@Entity 类,我得到了一堆异常跟踪。查看它们时,似乎它们都与具有以下形式的属性定义有关
protected List<String> testActivities;
@ElementCollection
protected List<String> getTestActivities() {
return testActivities;
}
public void setTestActivities(List<String> testActivities) {
this.testActivities = FXCollections.observableList(testActivities);
}
所有的异常都是List<String>
属性,getter 方法有一个@ElementCollection 注解。
我得到的异常总是(这里是上述 testActivities 属性的异常)
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table TestCase_testActivities_AUD (REV integer not null, TestCase_id bigint not null, testActivities varchar(255) not null, REVTYPE tinyint, primary key (REV, TestCase_id, testActivities)) engine=MyISAM" via JDBC Statement
..
Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 1000 bytes
..
我猜问题是包含 testActivities 的主键?!
testActivities 属性是指用户必须执行的指令列表,因此减少代码端的字符串长度,正如一些与密钥长度问题相关的 StackOverflow 页面所建议的那样,可能不是一个选项?!
目前所有表都是DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
用 utf8 而不是 utf8mb4 创建的,我可能可以节省内存,但这是一个好的可靠的解决方案吗?
如何以正确的方式解决这个问题?我对以上两点持不同看法。
我运行 MySQL Server 8.0.15、MyISAM,
我使用的是 Spring Boot,它为我提供了 Hibernate Envers 5.3.10