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如何改变它。

我该怎么做才能让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 

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

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

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

问题在于spring-boot-1.4 – 看起来他们已经改变了属性(或者其他什么)我现在发现这个答案ImprovedNamingStrategy不再适用于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=.RealNamingStrategyImpl 

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

对于想要在Postgresql和Spring boot 1.5.2中使用大写的人

 public class CustomDatabaseIdentifierNamingStrategy extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable { public static final long serialVersionUID = 1L; public static final CustomDatabaseIdentifierNamingStrategy INSTANCE = new CustomDatabaseIdentifierNamingStrategy(); @Override public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) { return new Identifier(name.getText().toUpperCase(), true); } @Override public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) { return new Identifier(name.getText().toUpperCase(), true); } } 

Spring boot 2.0.0和Hibernate 5

  public class MySqlNamingStrategyImpl extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable { protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) { return false; } 

}