【问题标题】:How to migrate a Hibernate NamingStrategy to (Implicit|Physical)NamingStrategy? Where is the documentation?如何将 Hibernate NamingStrategy 迁移到(隐式|物理)NamingStrategy?文档在哪里?
【发布时间】:2015-09-30 05:47:03
【问题描述】:

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

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

也许我遗漏了一些东西,但 JavaDoc 和问题都没有显示出两种策略类型的想法的任何证据。此外,我已经有了一个基于NamingStrategy 的策略:一个基于well-known one 的自定义OracleNamingStrategy

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


也相关:

【问题讨论】:

  • 你已经提到了 HHH-7078 还有一个指向 HHH-9417 的链接,它描述了他们拆分 NamingStrategy 的原因。对于迁移,您现有的OracleNamingStrategy 必须进行修改,以便它实现PhysicalNamingStrategy。这是你的问题吗?
  • @andih 谢谢。那么,PhysicalNamingStrategyNamingStrategy 的“继任者”吗? HHH-9417 非常简短地解释了该主题;是的,它可能会有所帮助。我仍然不相信许多问题中的 2-3 行(这不是文档)。
  • 我不会称它为继任者。这取决于提供不同命名策略的意图。如果您想控制隐式名称的生成方式,则必须实现ImplicitNamingStrategy。如果您的意图是控制隐式/显式ames 映射到物理数据库表/列的方式,则必须实现PhysicalNamingStrategy。如果您需要有关如何以及为什么必须搜索开发邮件列表的更多信息。随时帮助他们更新文档 - 这是一个开源项目。欢迎贡献者。

标签: java hibernate hibernate-5.x


【解决方案1】:

将下面的键值对放在你的休眠配置文件中

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

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

【讨论】:

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

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

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

      spring.jpa.hibernate.naming.physical-strategy=example.CustomStrategy

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2018-10-18
      相关资源
      最近更新 更多