h2+hibernate 列名为关键字时报错

h2+hibernate error when the column name is a keyword

我的产品使用 MySQL 5.7 和我 运行 h2 (MODE=MySQL) 进行测试。我的连接字符串是这样的:

jdbc:h2:mem:ci_main;IGNORECASE=TRUE;MODE=MySQL;

我使用 Hibernate 5.6.3 和 MySQL57InnoDBDialect。

h2 1.4.196 版本一直运行良好。但是最近,我尝试将 h2 升级到版本 2.0.204 并且 SQL 语句开始失败。错误是 42001 抱怨列名 value,我认为这是一个关键字。似乎在两个版本之间的某个时刻,h2 对 SQL 语法的限制比 MySQL 5.7.

更严格

如果我正在编写 SQL 语句,我可以引用列名。但是我正在使用休眠(它在 MySQL 5.7 上运行良好)并且我不想仅仅因为这个而更改列名。

有没有办法让h2更“兼容”MySQL 5.7?

谢谢。

您可以将 ;NON_KEYWORDS=VALUE 添加到 JDBC URL。

通常你还应该有 ;DATABASE_TO_LOWER=TRUE 除了 ;MODE=MySQL 以获得更好的兼容性。