From 3dcd8e234687d42c88a32294eeb5348b3ce57919 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 8 Jun 2015 14:20:50 +0200 Subject: [PATCH] Support for Hibernate naming strategy delegator hibernate.ejb.naming_strategy_delegator and hibernate.ejb.naming_strategy cannot be used at the same time but Boot sets the latter automatically. We now only set the naming strategy if no delegator has been specified via configuration Closes gh-3149 --- .../autoconfigure/orm/jpa/JpaProperties.java | 14 ++++++++------ ...CustomHibernateJpaAutoConfigurationTests.java | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) 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 {