我正在尝试为几个不同的数据库使用一个 Hibernate 映射:H2、Oracle、MySql。
每个数据库都有不同的保留字列表。
我希望 Hibernate 自动转义保留字。
我知道我可以:
- 使用反引号强制转义(为了安全而转义所有内容)
- 更改所有标识符,因此它们肯定不是任何数据库中的关键字(使它们难看)
- 将模式绑定到一组特定的数据库,转义关键字的联合(如果我将新数据库添加到组合中,将会中断)
有没有更优雅的解决方案?
我正在尝试为几个不同的数据库使用一个 Hibernate 映射:H2、Oracle、MySql。
每个数据库都有不同的保留字列表。
我希望 Hibernate 自动转义保留字。
我知道我可以:
有没有更优雅的解决方案?
AFAIK,Hibernate 不维护保留关键字列表(每个数据库),所以我认为您应该查看数据库标识符转义。
如果您使用的是 Hibernate 3.5+,请尝试hibernate.globally_quoted_identifiers=true
引用所有数据库标识符(这是他们为 JPA 2.0 添加的内容,如果您使用的是 JPA,请参阅规范的2.13 数据库对象命名部分,了解 JPA 的激活方式)。
在 3.5 版本之前,Hibernate 不提供任何用于全局转义的配置选项。实施自定义NamingStrategy
以透明地转义所有内容将是推荐的方法。