LocalSessionFactoryBean clears default MetadataSources on reinitialization

Issue: SPR-14815
This commit is contained in:
Juergen Hoeller 2016-10-31 11:53:10 +01:00
parent b6b536682e
commit 7cbab0efe3
1 changed files with 9 additions and 0 deletions

View File

@ -100,6 +100,8 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
private AsyncTaskExecutor bootstrapExecutor;
private boolean metadataSourcesAccessed = false;
private MetadataSources metadataSources;
private ResourcePatternResolver resourcePatternResolver;
@ -340,6 +342,7 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
*/
public void setMetadataSources(MetadataSources metadataSources) {
Assert.notNull(metadataSources, "MetadataSources must not be null");
this.metadataSourcesAccessed = true;
this.metadataSources = metadataSources;
}
@ -352,6 +355,7 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
* @see LocalSessionFactoryBuilder#LocalSessionFactoryBuilder(DataSource, ResourceLoader, MetadataSources)
*/
public MetadataSources getMetadataSources() {
this.metadataSourcesAccessed = true;
if (this.metadataSources == null) {
BootstrapServiceRegistryBuilder builder = new BootstrapServiceRegistryBuilder();
if (this.resourcePatternResolver != null) {
@ -386,6 +390,11 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
@Override
public void afterPropertiesSet() throws IOException {
if (this.metadataSources != null && !this.metadataSourcesAccessed) {
// Repeated initialization with no user-customized MetadataSources -> clear it.
this.metadataSources = null;
}
LocalSessionFactoryBuilder sfb = new LocalSessionFactoryBuilder(
this.dataSource, getResourceLoader(), getMetadataSources());