From 7cbab0efe3e939814657c5fdab7024bcd7eae339 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 31 Oct 2016 11:53:10 +0100 Subject: [PATCH] LocalSessionFactoryBean clears default MetadataSources on reinitialization Issue: SPR-14815 --- .../orm/hibernate5/LocalSessionFactoryBean.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java b/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java index c923a7d6f2..99f6a4bb3c 100644 --- a/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java +++ b/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java @@ -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());