Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
ea2a98d0
Commit
ea2a98d0
authored
May 05, 2018
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '2.0.x'
parents
cff552fb
c22e9a55
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
171 additions
and
130 deletions
+171
-130
HibernateJpaConfiguration.java
...boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.java
+46
-10
HibernateSettings.java
...amework/boot/autoconfigure/orm/jpa/HibernateSettings.java
+0
-27
JpaProperties.java
...ngframework/boot/autoconfigure/orm/jpa/JpaProperties.java
+4
-15
HibernateJpaAutoConfigurationTests.java
...configure/orm/jpa/HibernateJpaAutoConfigurationTests.java
+121
-0
JpaPropertiesTests.java
...mework/boot/autoconfigure/orm/jpa/JpaPropertiesTests.java
+0
-78
No files found.
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.java
View file @
ea2a98d0
...
...
@@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.orm.jpa;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.function.Supplier
;
...
...
@@ -84,10 +85,6 @@ class HibernateJpaConfiguration extends JpaBaseConfiguration {
private
DataSourcePoolMetadataProvider
poolMetadataProvider
;
private
final
PhysicalNamingStrategy
physicalNamingStrategy
;
private
final
ImplicitNamingStrategy
implicitNamingStrategy
;
private
final
List
<
HibernatePropertiesCustomizer
>
hibernatePropertiesCustomizers
;
HibernateJpaConfiguration
(
DataSource
dataSource
,
JpaProperties
jpaProperties
,
...
...
@@ -104,10 +101,23 @@ class HibernateJpaConfiguration extends JpaBaseConfiguration {
providers
.
getIfAvailable
(
Collections:
:
emptyList
));
this
.
poolMetadataProvider
=
new
CompositeDataSourcePoolMetadataProvider
(
metadataProviders
.
getIfAvailable
());
this
.
physicalNamingStrategy
=
physicalNamingStrategy
.
getIfAvailable
();
this
.
implicitNamingStrategy
=
implicitNamingStrategy
.
getIfAvailable
();
this
.
hibernatePropertiesCustomizers
=
hibernatePropertiesCustomizers
.
getIfAvailable
(()
->
Collections
.
emptyList
());
this
.
hibernatePropertiesCustomizers
=
determineHibernatePropertiesCustomizers
(
physicalNamingStrategy
.
getIfAvailable
(),
implicitNamingStrategy
.
getIfAvailable
(),
hibernatePropertiesCustomizers
.
getIfAvailable
(
Collections:
:
emptyList
));
}
private
List
<
HibernatePropertiesCustomizer
>
determineHibernatePropertiesCustomizers
(
PhysicalNamingStrategy
physicalNamingStrategy
,
ImplicitNamingStrategy
implicitNamingStrategy
,
List
<
HibernatePropertiesCustomizer
>
hibernatePropertiesCustomizers
)
{
if
(
physicalNamingStrategy
!=
null
||
implicitNamingStrategy
!=
null
)
{
LinkedList
<
HibernatePropertiesCustomizer
>
customizers
=
new
LinkedList
<>(
hibernatePropertiesCustomizers
);
customizers
.
addFirst
(
new
NamingStrategiesHibernatePropertiesCustomizer
(
physicalNamingStrategy
,
implicitNamingStrategy
));
return
customizers
;
}
return
hibernatePropertiesCustomizers
;
}
@Override
...
...
@@ -121,8 +131,6 @@ class HibernateJpaConfiguration extends JpaBaseConfiguration {
.
getDefaultDdlAuto
(
getDataSource
());
return
new
LinkedHashMap
<>(
getProperties
()
.
getHibernateProperties
(
new
HibernateSettings
().
ddlAuto
(
defaultDdlMode
)
.
implicitNamingStrategy
(
this
.
implicitNamingStrategy
)
.
physicalNamingStrategy
(
this
.
physicalNamingStrategy
)
.
hibernatePropertiesCustomizers
(
this
.
hibernatePropertiesCustomizers
)));
}
...
...
@@ -232,4 +240,32 @@ class HibernateJpaConfiguration extends JpaBaseConfiguration {
throw
new
IllegalStateException
(
"Could not configure JTA platform"
);
}
private
static
class
NamingStrategiesHibernatePropertiesCustomizer
implements
HibernatePropertiesCustomizer
{
private
final
PhysicalNamingStrategy
physicalNamingStrategy
;
private
final
ImplicitNamingStrategy
implicitNamingStrategy
;
NamingStrategiesHibernatePropertiesCustomizer
(
PhysicalNamingStrategy
physicalNamingStrategy
,
ImplicitNamingStrategy
implicitNamingStrategy
)
{
this
.
physicalNamingStrategy
=
physicalNamingStrategy
;
this
.
implicitNamingStrategy
=
implicitNamingStrategy
;
}
@Override
public
void
customize
(
Map
<
String
,
Object
>
hibernateProperties
)
{
if
(
this
.
physicalNamingStrategy
!=
null
)
{
hibernateProperties
.
put
(
"hibernate.physical_naming_strategy"
,
this
.
physicalNamingStrategy
);
}
if
(
this
.
implicitNamingStrategy
!=
null
)
{
hibernateProperties
.
put
(
"hibernate.implicit_naming_strategy"
,
this
.
implicitNamingStrategy
);
}
}
}
}
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateSettings.java
View file @
ea2a98d0
...
...
@@ -20,9 +20,6 @@ import java.util.ArrayList;
import
java.util.Collection
;
import
java.util.function.Supplier
;
import
org.hibernate.boot.model.naming.ImplicitNamingStrategy
;
import
org.hibernate.boot.model.naming.PhysicalNamingStrategy
;
/**
* Settings to apply when configuring Hibernate.
*
...
...
@@ -33,10 +30,6 @@ public class HibernateSettings {
private
Supplier
<
String
>
ddlAuto
;
private
ImplicitNamingStrategy
implicitNamingStrategy
;
private
PhysicalNamingStrategy
physicalNamingStrategy
;
private
Collection
<
HibernatePropertiesCustomizer
>
hibernatePropertiesCustomizers
;
public
HibernateSettings
ddlAuto
(
Supplier
<
String
>
ddlAuto
)
{
...
...
@@ -60,26 +53,6 @@ public class HibernateSettings {
return
(
this
.
ddlAuto
!=
null
?
this
.
ddlAuto
.
get
()
:
null
);
}
public
HibernateSettings
implicitNamingStrategy
(
ImplicitNamingStrategy
implicitNamingStrategy
)
{
this
.
implicitNamingStrategy
=
implicitNamingStrategy
;
return
this
;
}
public
ImplicitNamingStrategy
getImplicitNamingStrategy
()
{
return
this
.
implicitNamingStrategy
;
}
public
HibernateSettings
physicalNamingStrategy
(
PhysicalNamingStrategy
physicalNamingStrategy
)
{
this
.
physicalNamingStrategy
=
physicalNamingStrategy
;
return
this
;
}
public
PhysicalNamingStrategy
getPhysicalNamingStrategy
()
{
return
this
.
physicalNamingStrategy
;
}
public
HibernateSettings
hibernatePropertiesCustomizers
(
Collection
<
HibernatePropertiesCustomizer
>
hibernatePropertiesCustomizers
)
{
this
.
hibernatePropertiesCustomizers
=
new
ArrayList
<>(
...
...
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaProperties.java
View file @
ea2a98d0
...
...
@@ -25,9 +25,6 @@ import java.util.function.Supplier;
import
javax.sql.DataSource
;
import
org.hibernate.boot.model.naming.ImplicitNamingStrategy
;
import
org.hibernate.boot.model.naming.PhysicalNamingStrategy
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.orm.jpa.vendor.Database
;
import
org.springframework.util.ObjectUtils
;
...
...
@@ -215,9 +212,7 @@ public class JpaProperties {
HibernateSettings
settings
)
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>(
existing
);
applyNewIdGeneratorMappings
(
result
);
getNaming
().
applyNamingStrategies
(
result
,
settings
.
getImplicitNamingStrategy
(),
settings
.
getPhysicalNamingStrategy
());
getNaming
().
applyNamingStrategies
(
result
);
String
ddlAuto
=
determineDdlAuto
(
existing
,
settings:
:
getDdlAuto
);
if
(
StringUtils
.
hasText
(
ddlAuto
)
&&
!
"none"
.
equals
(
ddlAuto
))
{
result
.
put
(
"hibernate.hbm2ddl.auto"
,
ddlAuto
);
...
...
@@ -292,17 +287,11 @@ public class JpaProperties {
this
.
physicalStrategy
=
physicalStrategy
;
}
private
void
applyNamingStrategies
(
Map
<
String
,
Object
>
properties
,
ImplicitNamingStrategy
implicitStrategyBean
,
PhysicalNamingStrategy
physicalStrategyBean
)
{
private
void
applyNamingStrategies
(
Map
<
String
,
Object
>
properties
)
{
applyNamingStrategy
(
properties
,
"hibernate.implicit_naming_strategy"
,
implicitStrategyBean
!=
null
?
implicitStrategyBean
:
this
.
implicitStrategy
,
DEFAULT_IMPLICIT_STRATEGY
);
this
.
implicitStrategy
,
DEFAULT_IMPLICIT_STRATEGY
);
applyNamingStrategy
(
properties
,
"hibernate.physical_naming_strategy"
,
physicalStrategyBean
!=
null
?
physicalStrategyBean
:
this
.
physicalStrategy
,
DEFAULT_PHYSICAL_STRATEGY
);
this
.
physicalStrategy
,
DEFAULT_PHYSICAL_STRATEGY
);
}
private
void
applyNamingStrategy
(
Map
<
String
,
Object
>
properties
,
String
key
,
...
...
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfigurationTests.java
View file @
ea2a98d0
...
...
@@ -33,6 +33,8 @@ import javax.transaction.TransactionManager;
import
javax.transaction.UserTransaction
;
import
com.zaxxer.hikari.HikariDataSource
;
import
org.hibernate.boot.model.naming.ImplicitNamingStrategy
;
import
org.hibernate.boot.model.naming.PhysicalNamingStrategy
;
import
org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform
;
import
org.junit.Test
;
...
...
@@ -47,7 +49,10 @@ import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfigurati
import
org.springframework.boot.autoconfigure.orm.jpa.mapping.NonAnnotatedEntity
;
import
org.springframework.boot.autoconfigure.orm.jpa.test.City
;
import
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration
;
import
org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
;
import
org.springframework.boot.orm.jpa.hibernate.SpringJtaPlatform
;
import
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.orm.jpa.JpaTransactionManager
;
import
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
;
...
...
@@ -268,6 +273,83 @@ public class HibernateJpaAutoConfigurationTests
});
}
@Test
public
void
physicalNamingStrategyCanBeUsed
()
{
contextRunner
()
.
withUserConfiguration
(
TestPhysicalNamingStrategyConfiguration
.
class
)
.
run
((
context
)
->
{
Map
<
String
,
Object
>
hibernateProperties
=
context
.
getBean
(
HibernateJpaConfiguration
.
class
).
getVendorProperties
();
assertThat
(
hibernateProperties
).
contains
(
entry
(
"hibernate.physical_naming_strategy"
,
context
.
getBean
(
"testPhysicalNamingStrategy"
)));
assertThat
(
hibernateProperties
)
.
doesNotContainKeys
(
"hibernate.ejb.naming_strategy"
);
});
}
@Test
public
void
implicitNamingStrategyCanBeUsed
()
{
contextRunner
()
.
withUserConfiguration
(
TestImplicitNamingStrategyConfiguration
.
class
)
.
run
((
context
)
->
{
Map
<
String
,
Object
>
hibernateProperties
=
context
.
getBean
(
HibernateJpaConfiguration
.
class
).
getVendorProperties
();
assertThat
(
hibernateProperties
).
contains
(
entry
(
"hibernate.implicit_naming_strategy"
,
context
.
getBean
(
"testImplicitNamingStrategy"
)));
assertThat
(
hibernateProperties
)
.
doesNotContainKeys
(
"hibernate.ejb.naming_strategy"
);
});
}
@Test
public
void
namingStrategyInstancesTakePrecedenceOverNamingStrategyProperties
()
{
contextRunner
()
.
withUserConfiguration
(
TestPhysicalNamingStrategyConfiguration
.
class
,
TestImplicitNamingStrategyConfiguration
.
class
)
.
withPropertyValues
(
"spring.jpa.hibernate.naming.physical-strategy:com.example.Physical"
,
"spring.jpa.hibernate.naming.implicit-strategy:com.example.Implicit"
)
.
run
((
context
)
->
{
Map
<
String
,
Object
>
hibernateProperties
=
context
.
getBean
(
HibernateJpaConfiguration
.
class
).
getVendorProperties
();
assertThat
(
hibernateProperties
).
contains
(
entry
(
"hibernate.physical_naming_strategy"
,
context
.
getBean
(
"testPhysicalNamingStrategy"
)),
entry
(
"hibernate.implicit_naming_strategy"
,
context
.
getBean
(
"testImplicitNamingStrategy"
)));
assertThat
(
hibernateProperties
)
.
doesNotContainKeys
(
"hibernate.ejb.naming_strategy"
);
});
}
@Test
public
void
hibernatePropertiesCustomizerTakePrecedenceOverStrategyInstancesAndNamingStrategyProperties
()
{
contextRunner
()
.
withUserConfiguration
(
TestHibernatePropertiesCustomizerConfiguration
.
class
,
TestPhysicalNamingStrategyConfiguration
.
class
,
TestImplicitNamingStrategyConfiguration
.
class
)
.
withPropertyValues
(
"spring.jpa.hibernate.naming.physical-strategy:com.example.Physical"
,
"spring.jpa.hibernate.naming.implicit-strategy:com.example.Implicit"
)
.
run
((
context
)
->
{
Map
<
String
,
Object
>
hibernateProperties
=
context
.
getBean
(
HibernateJpaConfiguration
.
class
).
getVendorProperties
();
TestHibernatePropertiesCustomizerConfiguration
configuration
=
context
.
getBean
(
TestHibernatePropertiesCustomizerConfiguration
.
class
);
assertThat
(
hibernateProperties
).
contains
(
entry
(
"hibernate.physical_naming_strategy"
,
configuration
.
physicalNamingStrategy
),
entry
(
"hibernate.implicit_naming_strategy"
,
configuration
.
implicitNamingStrategy
));
assertThat
(
hibernateProperties
)
.
doesNotContainKeys
(
"hibernate.ejb.naming_strategy"
);
});
}
@Configuration
@TestAutoConfigurationPackage
(
City
.
class
)
static
class
TestInitializedJpaConfiguration
{
...
...
@@ -288,6 +370,45 @@ public class HibernateJpaAutoConfigurationTests
}
@Configuration
static
class
TestImplicitNamingStrategyConfiguration
{
@Bean
public
ImplicitNamingStrategy
testImplicitNamingStrategy
()
{
return
new
SpringImplicitNamingStrategy
();
}
}
@Configuration
static
class
TestPhysicalNamingStrategyConfiguration
{
@Bean
public
PhysicalNamingStrategy
testPhysicalNamingStrategy
()
{
return
new
SpringPhysicalNamingStrategy
();
}
}
@Configuration
static
class
TestHibernatePropertiesCustomizerConfiguration
{
private
final
PhysicalNamingStrategy
physicalNamingStrategy
=
new
SpringPhysicalNamingStrategy
();
private
final
ImplicitNamingStrategy
implicitNamingStrategy
=
new
SpringImplicitNamingStrategy
();
@Bean
public
HibernatePropertiesCustomizer
testHibernatePropertiesCustomizer
()
{
return
(
hibernateProperties
)
->
{
hibernateProperties
.
put
(
"hibernate.physical_naming_strategy"
,
this
.
physicalNamingStrategy
);
hibernateProperties
.
put
(
"hibernate.implicit_naming_strategy"
,
this
.
implicitNamingStrategy
);
};
}
}
public
static
class
TestJtaPlatform
implements
JtaPlatform
{
@Override
...
...
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/JpaPropertiesTests.java
View file @
ea2a98d0
...
...
@@ -19,15 +19,12 @@ package org.springframework.boot.autoconfigure.orm.jpa;
import
java.sql.Connection
;
import
java.sql.DatabaseMetaData
;
import
java.sql.SQLException
;
import
java.util.Collections
;
import
java.util.Map
;
import
java.util.function.Consumer
;
import
java.util.function.Supplier
;
import
javax.sql.DataSource
;
import
org.hibernate.boot.model.naming.ImplicitNamingStrategy
;
import
org.hibernate.boot.model.naming.PhysicalNamingStrategy
;
import
org.hibernate.cfg.AvailableSettings
;
import
org.junit.Before
;
import
org.junit.Test
;
...
...
@@ -102,81 +99,6 @@ public class JpaPropertiesTests {
}));
}
@Test
public
void
namingStrategyInstancesCanBeUsed
()
{
this
.
contextRunner
.
run
(
assertJpaProperties
((
properties
)
->
{
ImplicitNamingStrategy
implicitStrategy
=
mock
(
ImplicitNamingStrategy
.
class
);
PhysicalNamingStrategy
physicalStrategy
=
mock
(
PhysicalNamingStrategy
.
class
);
Map
<
String
,
Object
>
hibernateProperties
=
properties
.
getHibernateProperties
(
new
HibernateSettings
().
implicitNamingStrategy
(
implicitStrategy
)
.
physicalNamingStrategy
(
physicalStrategy
));
assertThat
(
hibernateProperties
).
contains
(
entry
(
"hibernate.implicit_naming_strategy"
,
implicitStrategy
),
entry
(
"hibernate.physical_naming_strategy"
,
physicalStrategy
));
assertThat
(
hibernateProperties
)
.
doesNotContainKeys
(
"hibernate.ejb.naming_strategy"
);
}));
}
@Test
public
void
namingStrategyInstancesTakePrecedenceOverNamingStrategyProperties
()
{
this
.
contextRunner
.
withPropertyValues
(
"spring.jpa.hibernate.naming.implicit-strategy:com.example.Implicit"
,
"spring.jpa.hibernate.naming.physical-strategy:com.example.Physical"
)
.
run
(
assertJpaProperties
((
properties
)
->
{
ImplicitNamingStrategy
implicitStrategy
=
mock
(
ImplicitNamingStrategy
.
class
);
PhysicalNamingStrategy
physicalStrategy
=
mock
(
PhysicalNamingStrategy
.
class
);
Map
<
String
,
Object
>
hibernateProperties
=
properties
.
getHibernateProperties
(
new
HibernateSettings
()
.
implicitNamingStrategy
(
implicitStrategy
)
.
physicalNamingStrategy
(
physicalStrategy
));
assertThat
(
hibernateProperties
).
contains
(
entry
(
"hibernate.implicit_naming_strategy"
,
implicitStrategy
),
entry
(
"hibernate.physical_naming_strategy"
,
physicalStrategy
));
assertThat
(
hibernateProperties
)
.
doesNotContainKeys
(
"hibernate.ejb.naming_strategy"
);
}));
}
@Test
public
void
hibernatePropertiesCustomizerTakePrecedenceOverStrategyInstancesAndNamingStrategyProperties
()
{
this
.
contextRunner
.
withPropertyValues
(
"spring.jpa.hibernate.naming.implicit-strategy:com.example.Implicit"
,
"spring.jpa.hibernate.naming.physical-strategy:com.example.Physical"
)
.
run
(
assertJpaProperties
((
properties
)
->
{
ImplicitNamingStrategy
implicitStrategy
=
mock
(
ImplicitNamingStrategy
.
class
);
PhysicalNamingStrategy
physicalStrategy
=
mock
(
PhysicalNamingStrategy
.
class
);
ImplicitNamingStrategy
effectiveImplicitStrategy
=
mock
(
ImplicitNamingStrategy
.
class
);
PhysicalNamingStrategy
effectivePhysicalStrategy
=
mock
(
PhysicalNamingStrategy
.
class
);
HibernatePropertiesCustomizer
customizer
=
(
hibernateProperties
)
->
{
hibernateProperties
.
put
(
"hibernate.implicit_naming_strategy"
,
effectiveImplicitStrategy
);
hibernateProperties
.
put
(
"hibernate.physical_naming_strategy"
,
effectivePhysicalStrategy
);
};
Map
<
String
,
Object
>
hibernateProperties
=
properties
.
getHibernateProperties
(
new
HibernateSettings
()
.
implicitNamingStrategy
(
implicitStrategy
)
.
physicalNamingStrategy
(
physicalStrategy
)
.
hibernatePropertiesCustomizers
(
Collections
.
singleton
(
customizer
)));
assertThat
(
hibernateProperties
).
contains
(
entry
(
"hibernate.implicit_naming_strategy"
,
effectiveImplicitStrategy
),
entry
(
"hibernate.physical_naming_strategy"
,
effectivePhysicalStrategy
));
assertThat
(
hibernateProperties
)
.
doesNotContainKeys
(
"hibernate.ejb.naming_strategy"
);
}));
}
@Test
public
void
hibernate5CustomNamingStrategiesViaJpaProperties
()
{
this
.
contextRunner
.
withPropertyValues
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment