一尘不染

使休眠反引用所有表/列名称

mysql

我面临着要与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它不这样做)。

编辑
这种讨论几乎使我相信我想要的是不可能的。


阅读 212

收藏
2020-05-17

共1个答案

一尘不染

为此,有一个未记录的属性。采用,

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

要么

<property name="hibernate.globally_quoted_identifiers">true</property>
2020-05-17