使hibernate反引所有表/列名称

Bor*_*jev 15 java mysql hibernate escaping

我面临着与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做到这一点).

编辑:这个讨论几乎让我相信我想要的是不可能的.

Mik*_*unu 36

为此目的,有一个未记录的财产.使用,

<property name="hibernate.globally_quoted_identifiers" value="true"/>
Run Code Online (Sandbox Code Playgroud)

要么

<property name="hibernate.globally_quoted_identifiers">true</property>
Run Code Online (Sandbox Code Playgroud)

  • 对于使用Spring的人:application.properties prop是:'spring.jpa.properties.hibernate.globally_quoted_identifiers = true' (6认同)
  • 这只会在表名和数据库名中添加反引号。列仍然是相同的...“插入'default_settings'(帐户,键,值)值(?,?,?)中。问题出在列名“ key”。 (2认同)