java 休眠更新 mySQL 表中保留字作为列名的行的解决方法
Workaround for java hibernate to update row in mySQL tables with reserved words as column names
我需要连接到一个遗留数据库,其中的表的列名如 'like'。解决此问题的最合乎逻辑的方法是重命名列,但数据库管理员不想对现有数据库执行任何更改。
有没有办法解决此问题以强制休眠添加反引号?
有多种解决方法,具体取决于上下文:
对于XML映射文件,关键字用引号括起来1.
对于 Hibernate 注释,用引号将关键字括起来2。
你可以告诉 Hibernate 引用所有 SQL 标识符:
hibernate.globally_quoted_identifiers=true
在 Hibernate 设置文件中。
在 HQL 中,您可以通过自定义转换器转义 别名;有关示例,请参阅 。
参考文献:
- http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#mapping-quoted-identifiers
- 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/
- How to escape reserved words in Hibernate's HQL
1 - 不同的来源说使用 Hibernate 应该知道如何翻译的特定于数据库的引号或反引号。我无法检查这一点。两种方法都可行。
2 - 显然可以使用双引号(转义)和方括号。
你能检查并尝试将这些设置标记为 true 吗?
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_quoted_identifiers (e.g. true or false (default value))
Should all database identifiers be quoted.
hibernate.globally_quoted_identifiers_skip_column_definitions (e.g. true or false (default value))
Assuming hibernate.globally_quoted_identifiers is true, this allows the global quoting to skip column-definitions as defined by javax.persistence.Column
, javax.persistence.JoinColumn
, etc, and while it avoids column-definitions being quoted due to global quoting, they can still be explicitly quoted in the annotation/xml mappings.
我需要连接到一个遗留数据库,其中的表的列名如 'like'。解决此问题的最合乎逻辑的方法是重命名列,但数据库管理员不想对现有数据库执行任何更改。
有没有办法解决此问题以强制休眠添加反引号?
有多种解决方法,具体取决于上下文:
对于XML映射文件,关键字用引号括起来1.
对于 Hibernate 注释,用引号将关键字括起来2。
你可以告诉 Hibernate 引用所有 SQL 标识符:
hibernate.globally_quoted_identifiers=true
在 Hibernate 设置文件中。
在 HQL 中,您可以通过自定义转换器转义 别名;有关示例,请参阅 。
参考文献:
- http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#mapping-quoted-identifiers
- 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/
- How to escape reserved words in Hibernate's HQL
1 - 不同的来源说使用 Hibernate 应该知道如何翻译的特定于数据库的引号或反引号。我无法检查这一点。两种方法都可行。
2 - 显然可以使用双引号(转义)和方括号。
你能检查并尝试将这些设置标记为 true 吗?
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_quoted_identifiers (e.g. true or false (default value)) Should all database identifiers be quoted.
hibernate.globally_quoted_identifiers_skip_column_definitions (e.g. true or false (default value))
Assuming hibernate.globally_quoted_identifiers is true, this allows the global quoting to skip column-definitions as defined byjavax.persistence.Column
,javax.persistence.JoinColumn
, etc, and while it avoids column-definitions being quoted due to global quoting, they can still be explicitly quoted in the annotation/xml mappings.