Hibernate 命名策略更改表名

新手上路,请多包涵

我对 hibernates(5.1 版)命名策略有点困惑——即它改变了我的表名,我想避免这种情况。另外 - spring.jpa.hibernate.naming_strategy 根据 intelij 似乎已弃用,但我找不到正确配置它的(另一种)方法。

我在 application.properties 中有以下配置:

 spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.current_session_context_class=thread

如前所述,第一个被标记为堕落。

现在我有一个实体:

 @Entity
@Table(name = "usaUploadTable", schema = "usertable201", catalog = "")
public class UsaUploadTable {
    ....
}

表名是 @Table(name = "") usaUploadTable。

现在当我运行我的应用程序时,我得到

表 ‘usertable201.usa_upload_table’ 不存在

这是正确的——它的命名不像休眠如何改变它。

我该怎么做才能让 hibernate 正确使用我的表名?

编辑:

我也试过

DefaultNamingStrategy
ImprovedNamingStrategy

他们都改变它

版本:

 spring-boot-1.4.0.RELEASE
hibernate 5.1
javax-transaction-api 1.2
hibernate-validator 5.2.4
javassist 3.20

原文由 user5181073 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 624
2 个回答

问题出在 spring-boot-1.4 - 似乎他们已经更改了属性(或其他)我现在发现这个答案 ImprovedNamingStrategy no longer working in Hibernate 5 ,但它仍然没有正确解析。所以我稍微更改了代码以不使用下划线方法并扩展新引入的类 SpringPhysicalNamingStrategy

 package com.foo;

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;

import java.io.Serializable;
import java.util.Locale;

public class RealNamingStrategyImpl extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {

    public static final PhysicalNamingStrategyImpl INSTANCE = new PhysicalNamingStrategyImpl();

    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        return new Identifier(name.getText(), name.isQuoted());
    }

    @Override
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
        return new Identifier(name.getText(), name.isQuoted());
    }

}

application.properties 我已将弃用的行更改为

spring.jpa.properties.hibernate.physical_naming_strategy=<package>.RealNamingStrategyImpl

现在它完全使用我在实体文件中使用的表名和列名。

原文由 user5181073 发布,翻译遵循 CC BY-SA 3.0 许可协议

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

它对我有用。这是我正在使用的版本:

 Spring Boot (v1.4.2.RELEASE)
Hibernate Core {5.0.11.Final}

原文由 rsinha 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题