20

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

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

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

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


还有相关的:

4

2 回答 2

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

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

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

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

于 2019-08-27T12:14:34.207 回答
2

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

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

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

于 2017-01-11T07:19:44.427 回答