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
以获得更好的兼容性。
我的产品使用 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
以获得更好的兼容性。