我面临着要与MySQL 5.0一起使用而编写的旧系统,现在需要将其迁移到MysQL 5.5(要求)。我发现一列名为maxvalue,这在MySQL 5.5中似乎是系统单词。因此,我所有包含此列的Hibernate查询都给出语法错误:
maxvalue
由以下原因引起:java.sql.BatchUpdateException:您的SQL语法有错误。检查与您的MySQL服务器版本相对应的手册,以获取在’maxvalue附近使用的正确语法
似乎Hibernate不会自动在字段名称周围加反引号`。如果提取查询,请maxvalue在MySQL 5.5中反引号正确运行。
我已经找到了解决方案,如何显式强制特定字段/表的反引号。问题是,我不确定还有多少其他列名会产生这种问题。 有没有办法告诉Hibernate自动反引用所有表/列名? (它将产生有效的SQL,但我不知道为什么默认情况下对于MySQL它不这样做)。
编辑 :这种讨论几乎使我相信我想要的是不可能的。
为此,有一个未记录的属性。采用,
<property name="hibernate.globally_quoted_identifiers" value="true"/>
要么
<property name="hibernate.globally_quoted_identifiers">true</property>