NamingStrategy
已在Hibernate 4.2 / 4.3(HHH-7079)中被标记为已弃用。从Hibernate 5开始,现在它将附带两个替换(?)接口ImplictNamingStrategy
和PhysicalNamingStrategy
(HHH-7078),并最终放弃了对旧NamingStrategy
的支持。这就是为什么Spring即将推出的Hibernate5支持甚至删除了namingStrategy()
和implicitNamingStrategy()
以及physicalNamingStrategy()
的配置文件。到目前为止,非常好。
尽管在即将发布的Hibernate 5(截至今天)的某些文档(即不完整的working-5.0-migration-guide.md)和(生成的)发行说明中提到过,但我没有找到具体的例子如何实际使用这些。
也许我错过了一些东西,但是JavaDoc和问题都没有显示出这两种策略类型的任何证据。此外,我已经有一个基于NamingStrategy
的策略:基于well-known one的自定义OracleNamingStrategy
。
虽然我对代码中的正确解决方案感兴趣(显然),但实际问题是获得有效的迁移文档和/或重组命名策略的概念性想法。
也相关:
答案 0 :(得分:2)
将以下键值对放在休眠配置文件
中hibernate.implicit_naming_strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
hibernate.physical_naming_strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
答案 1 :(得分:0)
如果您在实体类中提供@Table和@Column批注,其名称带有下划线,即 user_id ,即@Column(name =“ user_id ”),则列名称为 user_id ;如果您将其指定为用户ID,则如果您不使用任何策略或隐式策略(特别是spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
),它将更改为user_id。因此,如果您想要一个策略,其中实体属性名称更改为带下划线和小写字母的策略,即从 userId 到 user_id 的某一项,则应使用隐式或不使用策略(实际上使用隐式策略)。
如果您不希望您的命名策略在列名或类名上添加下划线,则您需要使用的策略如下所示:
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl。您在注释@Table
和@Column’s
name 属性中提供的内容将保持原样。
如果您不想提供批注并且想要手动处理表名和列名,则应该扩展类org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
并覆盖所需的方法。如果您在某些情况下仍使用注释,请记住,覆盖的方法将应用于这些注释中写的名称。
spring.jpa.hibernate.naming.physical-strategy = example.CustomStrategy