在休眠中将“反引号”添加到列名
Posted
技术标签:
【中文标题】在休眠中将“反引号”添加到列名【英文标题】:Add `backticks` to column names in hibernate 【发布时间】:2018-06-10 12:24:09 【问题描述】:考虑查询
INSERT INTO order (id, key, value) VALUES (?, ?, ?);
上述查询中存在 mysql 语法错误,因为 order
和 key
是 MySQL 中的关键字。所以解决方案是在查询中添加反引号。
INSERT INTO `order` (id, `key`, value) VALUES (?, ?, ?);
Hibernate 很笨,不会自动执行此操作。根据this answer,通过在hibernate配置文件中添加如下属性解决了表名问题。
<property name="hibernate.globally_quoted_identifiers">true</property>
但这只会给数据库名和表名添加反引号。列名仍然存在问题。
如何为所有列名添加反引号?
休眠版本:3.6.10.Final MySQL 版本:5.7 hibernate.dialect : org.hibernate.dialect.MySQL5Dialect JDK 版本:1.8(如果有任何关系)
【问题讨论】:
值得注意的是,您使用的是过时版本的 Hibernate。 【参考方案1】:我找到了一种在 hibernate 中为列名添加反引号的方法。
-
打开与已映射的pojo文件相关的xml文件(TableName.hbm.xml)。
查找相关列的属性。
<property name="key" type="string">
<column name="key" />
</property>
用方括号括住列名。
<property name="key" type="string">
<column name="[key]" />
</property>
但这是一个艰苦的过程,因为您必须对所有 MySQL keywords 的所有列一一进行此操作。最好的方法是避免将MySQL keywords 添加为您的数据库、表或列名。
参考资料:
How to use database reserved keyword in Hibernate ?【讨论】:
以上是关于在休眠中将“反引号”添加到列名的主要内容,如果未能解决你的问题,请参考以下文章