休眠表和列的自动保留字转义

2022-09-01 17:31:58

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

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

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

我知道我可以:

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

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


答案 1

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

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

在版本 3.5 之前,Hibernate 不提供任何用于全局转义的配置选项。实现自定义以透明地转义所有内容将是推荐的方法。NamingStrategy

另请参见


答案 2