diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaProperties.java index 63f255fc9e..0441aefcef 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaProperties.java @@ -158,12 +158,14 @@ public class JpaProperties { private Map getAdditionalProperties(Map existing, DataSource dataSource) { Map result = new HashMap(existing); - if (!isAlreadyProvided(existing, "ejb.naming_strategy") - && this.namingStrategy != null) { - result.put("hibernate.ejb.naming_strategy", this.namingStrategy.getName()); - } - else if (this.namingStrategy == null) { - result.put("hibernate.ejb.naming_strategy", DEFAULT_NAMING_STRATEGY); + if (!isAlreadyProvided(existing, "ejb.naming_strategy_delegator")) { + if (!isAlreadyProvided(existing, "ejb.naming_strategy") + && this.namingStrategy != null) { + result.put("hibernate.ejb.naming_strategy", this.namingStrategy.getName()); + } + else if (this.namingStrategy == null) { + result.put("hibernate.ejb.naming_strategy", DEFAULT_NAMING_STRATEGY); + } } String ddlAuto = getOrDeduceDdlAuto(existing, dataSource); if (StringUtils.hasText(ddlAuto) && !"none".equals(ddlAuto)) { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/CustomHibernateJpaAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/CustomHibernateJpaAutoConfigurationTests.java index 40c0bae3a4..771708295d 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/CustomHibernateJpaAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/CustomHibernateJpaAutoConfigurationTests.java @@ -84,6 +84,22 @@ public class CustomHibernateJpaAutoConfigurationTests { assertThat(actual, equalTo("create-drop")); } + @Test + public void testNamingStrategyDelegatorTakesPrecedence() { + EnvironmentTestUtils.addEnvironment(this.context, + "spring.jpa.properties.hibernate.ejb.naming_strategy_delegator:" + + "org.hibernate.cfg.naming.ImprovedNamingStrategyDelegator"); + this.context.register(TestConfiguration.class, + EmbeddedDataSourceConfiguration.class, + PropertyPlaceholderAutoConfiguration.class, + HibernateJpaAutoConfiguration.class); + this.context.refresh(); + JpaProperties bean = this.context.getBean(JpaProperties.class); + DataSource dataSource = this.context.getBean(DataSource.class); + assertThat(bean.getHibernateProperties(dataSource).get( + "hibernate.ejb.naming_strategy"), nullValue()); + } + @Configuration @TestAutoConfigurationPackage(City.class) protected static class TestConfiguration {