javahibernate使用保留字作为列名更新mysql表中的行的解决方法

ujv3wf0j  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(626)

我需要连接到具有列名(如“like”)的表的旧数据库。最合乎逻辑的解决方法是重命名列,但是db admin不想对现有db执行任何更改。
有没有办法解决这个问题来强制hibernate添加backtick?

kzipqqlq

kzipqqlq1#

根据上下文的不同,有不同的解决方法:
对于xmlMap文件,请用引号1括起关键字。
对于hibernate注解,用引号2括住关键字。
您可以告诉hibernate引用所有sql标识符:

hibernate.globally_quoted_identifiers=true

在hibernate设置文件中。
在hql中,您可以通过一个定制的转换器来转义别名;看到了吗https://stackoverflow.com/a/5754720/139985 举个例子。
参考文献:
http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/hibernate_user_guide.html#mapping-引用的标识符
https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/configurations.html
https://www.mkyong.com/hibernate/how-to-use-database-reserved-keyword-in-hibernate/
如何在hibernate的hql中转义保留字
1-不同的消息来源说使用特定于数据库的引号或反勾号,hibernate应该知道如何翻译这些引号或反勾号。我不能检查这个。两种方法都可行。
2-显然可以使用双引号(转义)和方括号。

9o685dep

9o685dep2#

你能检查并尝试将这些设置标记为真吗?

hibernate.globally_quoted_identifiers = true
hibernate.globally_quoted_identifiers_skip_column_definitions = true

从hibernate文档中,我引用:(https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/configurations.html)
hibernate.globally\引用的\标识符(例如,true或false(默认值))应该引用所有数据库标识符。
hibernate.globally\引用的\标识符\跳过\列\定义(例如true或false(默认值))
假设hibernate.globally\u quoted\u identifiers为true,则允许全局引用跳过由定义的列定义 javax.persistence.Column , javax.persistence.JoinColumn ,虽然它避免了由于全局引用而引用列定义,但它们仍然可以在注解/xmlMap中显式引用。

相关问题