我试图对多个不同的数据库使用一种Hibernate映射:H2,Oracle,MySql。

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

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

我知道我可以:

  • 使用反引号强制转义(为了安全起见,请逃避所有操作)
  • 更改所有标识符,因此它们肯定不是任何数据库中的关键字(使它们很难看)
  • 将模式绑定(bind)到一组特定的数据库,转义关键字的并集(如果将新数据库添加到混合数据库中,则将中断)

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

    最佳答案

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

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

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

    也可以看看

  • Database independant Column/Table name escaping?
  • HHH-2578 - redesign SessionFactory building-我的理解是,解决此问题将使自动转义关键字(通过方言)成为可能。
  • 07-25 21:38
    查看更多