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

Rom*_*nka 23 java orm hibernate escaping reserved-words

我试图为几个不同的数据库使用一个Hibernate映射:H2,Oracle,MySql.

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

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

我知道我可以:

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

有更优雅的解决方案吗?

Pas*_*ent 31

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

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

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

也可以看看