为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设 – 我的理解是,解决这个问题会使关键字(通过方言)自动转义成为可能。