From 5f6406430f76bc4d75cdfadfe8431a26875b7558 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sat, 19 Mar 2016 13:48:54 +0100 Subject: [PATCH] LocalSessionFactoryBuilder/Bean supports setMultiTenantConnectionProvider Issue: SPR-14072 --- .../orm/hibernate5/LocalSessionFactoryBean.java | 17 ++++++++++++++++- .../hibernate5/LocalSessionFactoryBuilder.java | 12 +++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) 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 08f2d8f3f5..aa680e4772 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 @@ -29,6 +29,7 @@ import org.hibernate.boot.model.naming.PhysicalNamingStrategy; import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.context.spi.CurrentTenantIdentifierResolver; +import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; @@ -85,6 +86,8 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator private Object jtaTransactionManager; + private MultiTenantConnectionProvider multiTenantConnectionProvider; + private CurrentTenantIdentifierResolver currentTenantIdentifierResolver; private TypeFilter[] entityTypeFilters; @@ -238,6 +241,15 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator this.jtaTransactionManager = jtaTransactionManager; } + /** + * Set a {@link MultiTenantConnectionProvider} to be passed on to the SessionFactory. + * @since 4.3 + * @see LocalSessionFactoryBuilder#setMultiTenantConnectionProvider + */ + public void setMultiTenantConnectionProvider(MultiTenantConnectionProvider multiTenantConnectionProvider) { + this.multiTenantConnectionProvider = multiTenantConnectionProvider; + } + /** * Set a {@link CurrentTenantIdentifierResolver} to be passed on to the SessionFactory. * @see LocalSessionFactoryBuilder#setCurrentTenantIdentifierResolver @@ -251,7 +263,6 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator *

Default is to search all specified packages for classes annotated with * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} * or {@code @javax.persistence.MappedSuperclass}. - * @since 4.2 * @see #setPackagesToScan */ public void setEntityTypeFilters(TypeFilter... entityTypeFilters) { @@ -444,6 +455,10 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator sfb.setJtaTransactionManager(this.jtaTransactionManager); } + if (this.multiTenantConnectionProvider != null) { + sfb.setMultiTenantConnectionProvider(this.multiTenantConnectionProvider); + } + if (this.currentTenantIdentifierResolver != null) { sfb.setCurrentTenantIdentifierResolver(this.currentTenantIdentifierResolver); } diff --git a/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java b/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java index a4bb59e74f..db3695a7c8 100644 --- a/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java +++ b/spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java @@ -43,6 +43,7 @@ import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Environment; +import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.springframework.core.io.Resource; @@ -183,12 +184,21 @@ public class LocalSessionFactoryBuilder extends Configuration { return this; } + /** + * Set a {@link MultiTenantConnectionProvider} to be passed on to the SessionFactory. + * @since 4.3 + * @see AvailableSettings#MULTI_TENANT_CONNECTION_PROVIDER + */ + public LocalSessionFactoryBuilder setMultiTenantConnectionProvider(MultiTenantConnectionProvider multiTenantConnectionProvider) { + getProperties().put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider); + return this; + } + /** * Specify custom type filters for Spring-based scanning for entity classes. *

Default is to search all specified packages for classes annotated with * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} * or {@code @javax.persistence.MappedSuperclass}. - * @since 4.2 * @see #scanPackages */ public LocalSessionFactoryBuilder setEntityTypeFilters(TypeFilter... entityTypeFilters) {