Hibernate表和列的自动保留字转义

时间:2010-07-29 16:30:30

标签: java hibernate escaping orm reserved-words

我正在尝试将一个Hibernate映射用于几个不同的数据库:H2,Oracle,MySql。

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

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

我知道我可以:

  • 使用反引号强制转义(逃避一切只是为了安全)
  • 更改所有标识符,因此它们肯定不是任何数据库中的关键字(让它们变得丑陋)
  • 将架构绑定到一组特定的数据库,转义关键字的并集(如果我将新数据库添加到混合中,将会中断)

有更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:31)

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

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

在3.5版之前,Hibernate没有为全局转义提供任何配置选项。实施自定义NamingStrategy以透明地逃避一切将是推荐的方式。

另见