【问题标题】:Automatic reserved word escaping for Hibernate tables and columnsHibernate 表和列的自动保留字转义
【发布时间】:2011-03-22 20:17:46
【问题描述】:

我正在尝试为几个不同的数据库使用一个 Hibernate 映射:H2、Oracle、MySql。

每个数据库都有不同的保留字列表。

我希望 Hibernate 自动转义保留字。

我知道我可以:

  • 使用反引号强制转义(为了安全而转义所有内容)
  • 更改所有标识符,使它们在任何数据库中都不是关键字(让它们变得丑陋)
  • 将架构绑定到一组特定的数据库,转义关键字的联合(如果我将新数据库添加到组合中,则会中断)

有没有更优雅的解决方案?

【问题讨论】:

  • 在我看来这是hibernate的一个疏漏,疏漏的严重程度就等于是一个bug。

标签: java hibernate escaping orm reserved-words


【解决方案1】:

AFAIK,Hibernate 不维护保留关键字列表(每个数据库),所以我认为您应该查看数据库标识符转义。

如果您使用的是 Hibernate 3.5+,请尝试 hibernate.globally_quoted_identifiers=true 引用所有数据库标识符(这是他们为 JPA 2.0 添加的内容,请参阅规范的 2.13 数据库对象命名部分如果您使用的是 JPA,则通过 JPA 方式激活此功能)。

在 3.5 版之前,Hibernate 不提供任何用于全局转义的配置选项。推荐使用自定义NamingStrategy 来透明地转义所有内容。

另见

【讨论】:

  • 谢谢。我很困惑这不是默认设置,考虑到缺乏转义只会让你头疼,而且没有什么积极的意义......嗯,也许不区分大小写。
  • @Roman 我想一定有一个好的理由(我希望如此)但我不知道(也许确实不区分大小写)。
猜你喜欢
  • 2011-08-06
  • 2021-05-24
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多