如何将休眠命名策略迁移到(隐式|物理)命名策略?文档在哪里?

2022-09-02 10:58:56

在 Hibernate 4.2/4.3 (HHH-7079) 中已被标记为已弃用。从Hibernate 5开始,现在它将附带两个替换(?)接口和(HHH-7078),并最终放弃了对旧.这就是为什么Spring即将推出的Hibernate5支持甚至删除了配置器和和.目前为止,一切都好。NamingStrategyImplictNamingStrategyPhysicalNamingStrategyNamingStrategynamingStrategy()implicitNamingStrategy()physicalNamingStrategy()

虽然在一些文档(即不完整的 working-5.0-migration-guide.md)和即将推出的Hibernate 5(截至今天)的(生成的)发行说明中提到了它,但我没有找到如何实际使用这些的具体示例。

也许我错过了一些东西,但是JavaDoc和问题都没有显示出任何证据证明这两种策略类型的想法。此外,我已经有一个基于的策略:基于众所周知的自定义。NamingStrategyOracleNamingStrategy

虽然我对代码中的适当解决方案感兴趣(显然),但实际问题是获得有效的迁移文档和/或重组命名策略的概念。


还相关:


答案 1

将以下键值对放在休眠配置文件中

hibernate.implicit_naming_strategy=org.hibernate.boot.model.nameing.ImplicitNamingStrategyLegacyHbmImpl

hibernate.physical_naming_strategy=org.hibernate.boot.model.nameing PhysicalNamingStrategyStandardImpl


答案 2
  1. 如果您在实体类中提供@Table和@Column注释,并且名称带有下划线,即user_id即@Column(name=“user_id”),它将采用列名作为user_id;如果您将其作为 userid 提供,那么如果您不使用策略或隐式策略(特别是),它将更改为 user_id 。因此,如果您想要一个策略,其中实体属性名称更改为带有下划线和小写字母的策略,即从userIduser_id,则应使用隐式或无策略(实际上使用隐式策略)。spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl

  2. 如果您不希望命名策略在列名或类名中添加下划线,则需要使用的策略将如下所示:spring.jpa.hibernate.nameing.physical-strategy=org.hibernate.boot.model.nameingStrategyStandardImpl。您在批注和名称属性中提供的内容将保持原样。@Table@Column’s

  3. 如果不想提供批注并希望手动处理表名和列名,则应扩展类并重写所需的方法。如果此处的某些情况仍使用批注,请记住,被覆盖的方法将应用于这些批注中写入的名称。org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

    spring.jpa.hibernate.nameing.physical-strategy=example.自定义策略


推荐