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; }
}
- 当’hibernate.dialect’没有设置hibernate4 tomcat7时,连接不能为null
- JPA 2.0 Hibernate @OneToMany + @MapKeyJoinColumn
- 如何在Java Hibernate应用程序中修复java.lang.ArrayIndexOutOfBoundsException
- 在Hibernate中使用lazy作为属性
- Spring 3.2 + Hibernate 4 OpenSessionInViewFilter
- JavaFX + Hibernate(JPA)持久性+ Derby DB
- 密钥’PRIMARY’的重复条目’string1-string2′
- JPA Query.getResultList() – 以通用方式使用
- 如何使用Join定义JPA存储库查询?