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

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

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

我想Hibernate自动转义保留字。

我知道我可以:

  • 使用反引号强制转义(逃避一切只是为了安全)
  • 改变所有的标识符,所以他们肯定不是关键字在任何数据库(使他们难看)
  • 将模式绑定到一组特定的数据库,转义关键字的联合(如果向混合添加新的数据库,将会中断)

有没有更优雅的解决scheme?

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

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

在版本3.5之前,Hibernate不提供全局转义的configuration选项。 实现一个自定义的NamingStrategy透明地转义一切将是build议的方式。

也可以看看

  • 数据库独立列/表名转义?
  • HHH-2578 – 重新deviseSessionFactory的build设 – 我的理解是,解决这个问题会使关键字(通过方言)自动转义成为可能。