18

我面临着为使用 MySQL 5.0 而编写的遗留系统,现在需要将其迁移到 MySQL 5.5(要求)。我发现有一列名为maxvalue,这似乎是 MySQL 5.5 中的系统字。因此,我所有包含此列的 Hibernate 查询都会给出语法错误:

原因:java.sql.BatchUpdateException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'maxvalue 附近使用的正确语法

似乎 Hibernate 不会自动反引号 ` 围绕字段名称。如果我提取查询,反引号`maxvalue`它在 MySQL 5.5 中正确运行。

我找到了如何为特定字段/表显式强制反引号的解决方案。问题是我不确定有多少其他列名会产生这样的问题。有没有办法告诉 Hibernate 自动反引号所有表/列名?(这将产生有效的 SQL,我不知道为什么它在默认情况下对 MySQL 不这样做)。

编辑这个讨论几乎让我相信我想要的东西是不可能的。

4

1 回答 1

41

为此目的,有一个未记录的财产。采用,

<property name="hibernate.globally_quoted_identifiers" value="true"/>

或者

<property name="hibernate.globally_quoted_identifiers">true</property>
于 2013-02-18T19:15:07.047 回答