当列名是关键字时h2+hibernate错误

Jam*_*mes 8 h2

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

jdbc:h2:mem:ci_main;IGNORECASE=TRUE;MODE=MySQL;
Run Code Online (Sandbox Code Playgroud)

我使用 Hibernate 5.6.3 和 MySQL57InnoDBDialect。

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

如果我编写 SQL 语句,我可以引用列名。但我正在使用 hibernate(它可以在 MySQL 5.7 上正常工作),并且我不想仅仅因为这个而更改列名。

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

谢谢。

Evg*_*nov 16

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

通常,为了更好的兼容性,您还应该拥有;DATABASE_TO_LOWER=TRUE此外;MODE=MySQL