Align Hibernate 5 join table names with those from SpringNamingStrategy

Previously, the name of a join table when using Hibernate 5 would
differ from those when using Hibernate 4 with the default
SpringNamingStrategy.

This commit introduces SpringImplicitNamingStrategy which customises the
name of join tables to match those produced by SpringNamingStrategy.

Closes gh-5880
This commit is contained in:
Andy Wilkinson
2016-05-11 10:11:34 +01:00
parent 1bb2c4fc00
commit 5c0d400c23
5 changed files with 63 additions and 13 deletions

View File

@@ -235,6 +235,8 @@ public class JpaProperties {
private static final String DEFAULT_PHYSICAL_STRATEGY = "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy";
private static final String DEFAULT_IMPLICIT_STRATEGY = "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy";
/**
* Hibernate 5 implicit naming strategy fully qualified name.
*/
@@ -288,7 +290,8 @@ public class JpaProperties {
private void applyHibernate5NamingStrategy(Map<String, String> properties) {
applyHibernate5NamingStrategy(properties,
"hibernate.implicit_naming_strategy", this.implicitStrategy, null);
"hibernate.implicit_naming_strategy", this.implicitStrategy,
DEFAULT_IMPLICIT_STRATEGY);
applyHibernate5NamingStrategy(properties,
"hibernate.physical_naming_strategy", this.physicalStrategy,
DEFAULT_PHYSICAL_STRATEGY);

View File

@@ -26,6 +26,7 @@ import org.junit.After;
import org.junit.Test;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy;
import org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import org.springframework.boot.test.util.EnvironmentTestUtils;
@@ -98,11 +99,14 @@ public class JpaPropertiesTests {
JpaProperties properties = load(HibernateVersion.V5);
Map<String, String> hibernateProperties = properties
.getHibernateProperties(mockStandaloneDataSource());
assertThat(hibernateProperties).doesNotContainKeys(
"hibernate.ejb.naming_strategy", "hibernate.implicit_naming_strategy");
assertThat(hibernateProperties)
.doesNotContainKeys("hibernate.ejb.naming_strategy");
assertThat(hibernateProperties).containsEntry(
"hibernate.physical_naming_strategy",
SpringPhysicalNamingStrategy.class.getName());
assertThat(hibernateProperties).containsEntry(
"hibernate.implicit_naming_strategy",
SpringImplicitNamingStrategy.class.getName());
}
@Test