当使用 ;MODE=MYSQL 和使用 org.hibernate.dialect.MySQL5Dialect 的方言时,H2 似乎不支持 hibernate 为 MySQL5 方言生成的索引/FK 语法。
我的目标是拥有一组 SQL 脚本并将休眠用于 ORM 部分。在 MySQL 5.5 中一切正常,但是当我尝试将 H2 用于单元测试和启动我的应用程序的演示版本时,我从 hibernate 生成的 alter table 语句中得到数百次失败,如下所示。不幸的是,我还没有找到一种方法让休眠来改变语句的生成方式,但这也可能是一种选择。我尝试使用 org.hibernate.dialect.H2Dialect 但这会产生更严重的错误,所以我认为这不会起作用。
alter table SAM_PUBLISHEDSECUREDIP_T
add index FK1EDEA25B9482C945 (ASSESSMENTID),
add constraint FK1EDEA25B9482C945 foreign key (ASSESSMENTID)
references SAM_PUBLISHEDASSESSMENT_T (ID)
在 H2 中导致这样的错误:
org.h2.jdbc.JdbcSQLException:SQL 语句中的语法错误“ALTER TABLE SAM_PUBLISHEDSECUREDIP_T ADD INDEX FK1EDEA25B9482C945 (ASSESSMENTID),[*] ADD CONSTRAINT FK1EDEA25B9482C945 FOREIGN KEY (ASSESSMENTID) REFERENCES SAM_PUBLISHEDASSESSMENT_T (ID)”;SQL 语句:alter table SAM_PUBLISHEDSECUREDIP_T 添加索引 FK1EDEA25B9482C945 (ASSESSMENTID),添加约束 FK1EDEA25B9482C945 外键 (ASSESSMENTID) 引用 SAM_PUBLISHEDASSESSMENT_T (ID) [42000-172]
注意:我愿意为 H2 编写和提供补丁,但我可以使用一些提示来查看该代码库的位置。