Spring - Hibernate JPA配置中的问题设置方言

时间:2018-01-07 04:26:16

标签: java spring hibernate spring-mvc jpa

我从Spring Boot 1.5.9迁移到正常的Spring项目。

application.properties我已添加

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
spring.autoconfigure.exclude[2]=org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration
spring.autoconfigure.exclude[3]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

application.properties我有一条线来定义我使用的方言,它可以正常使用自动配置

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl

当我尝试使用新的配置类运行项目时我有org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory',如果我删除了方言行,我的自动配置会出现同样的错误。 我在配置类中指定属性(包括方言)的方法如下

private Map<String, String> properties = new HashMap<String, String>();

public HibernateJpaConfig() {
    properties.put("hibernate.hbm2ddl.auto", "create-drop");
    properties.put("hibernate.ejb.naming_strategy", "org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl");
}

我注意到可能是我的问题的警告信息

WARN 13292 --- [  restartedMain] org.hibernate.orm.deprecation            : HHH90000006: Attempted to specify unsupported NamingStrategy via setting [hibernate.ejb.naming_strategy]; NamingStrategy has been removed in favor of the split ImplicitNamingStrategy and PhysicalNamingStrategy; use [hibernate.implicit_naming_strategy] or [hibernate.physical_naming_strategy], respectively, instead.

如果我尝试用其中一个替换地图的第二个值,我仍然有相同的错误。

1 个答案:

答案 0 :(得分:1)

请看一下弹簧靴的发布说明。 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes#naming-strategy

我认为问题在于naming_strategy。

不再使用SpringNamingStrategy,因为Hibernate 5.1已经删除了对旧NamingStrategy接口的支持。现在自动配置了一个新的SpringPhysicalNamingStrategy,它与Hibernate的默认ImplicitNamingStrategy结合使用。这应该与Spring Boot 1.3默认值非常接近(如果不相同),但是,在升级时应该检查数据库模式是否正确。

如果您在升级之前已经在使用Hibernate 5,那么您可能正在使用Hibernate的5默认值。如果要在升级后还原它们,请在配置中设置此属性:

spring.jpa.hibernate.naming.physical策略= org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl