我需要连接到具有列名(如“like”)的表的旧数据库。最合乎逻辑的解决方法是重命名列,但是db admin不想对现有db执行任何更改。有没有办法解决这个问题来强制hibernate添加backtick?
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.htmlhttps://www.mkyong.com/hibernate/how-to-use-database-reserved-keyword-in-hibernate/如何在hibernate的hql中转义保留字1-不同的消息来源说使用特定于数据库的引号或反勾号,hibernate应该知道如何翻译这些引号或反勾号。我不能检查这个。两种方法都可行。2-显然可以使用双引号(转义)和方括号。
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中显式引用。
javax.persistence.Column
javax.persistence.JoinColumn
2条答案
按热度按时间kzipqqlq1#
根据上下文的不同,有不同的解决方法:
对于xmlMap文件,请用引号1括起关键字。
对于hibernate注解,用引号2括住关键字。
您可以告诉hibernate引用所有sql标识符:
在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-显然可以使用双引号(转义)和方括号。
9o685dep2#
你能检查并尝试将这些设置标记为真吗?
从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中显式引用。