Skip to content

Commit 5f64064

Browse files
committed
LocalSessionFactoryBuilder/Bean supports setMultiTenantConnectionProvider
Issue: SPR-14072
1 parent a1a06cd commit 5f64064

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
3030
import org.hibernate.cfg.Configuration;
3131
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
32+
import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
3233

3334
import org.springframework.beans.factory.DisposableBean;
3435
import org.springframework.beans.factory.FactoryBean;
@@ -85,6 +86,8 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
8586

8687
private Object jtaTransactionManager;
8788

89+
private MultiTenantConnectionProvider multiTenantConnectionProvider;
90+
8891
private CurrentTenantIdentifierResolver currentTenantIdentifierResolver;
8992

9093
private TypeFilter[] entityTypeFilters;
@@ -238,6 +241,15 @@ public void setJtaTransactionManager(Object jtaTransactionManager) {
238241
this.jtaTransactionManager = jtaTransactionManager;
239242
}
240243

244+
/**
245+
* Set a {@link MultiTenantConnectionProvider} to be passed on to the SessionFactory.
246+
* @since 4.3
247+
* @see LocalSessionFactoryBuilder#setMultiTenantConnectionProvider
248+
*/
249+
public void setMultiTenantConnectionProvider(MultiTenantConnectionProvider multiTenantConnectionProvider) {
250+
this.multiTenantConnectionProvider = multiTenantConnectionProvider;
251+
}
252+
241253
/**
242254
* Set a {@link CurrentTenantIdentifierResolver} to be passed on to the SessionFactory.
243255
* @see LocalSessionFactoryBuilder#setCurrentTenantIdentifierResolver
@@ -251,7 +263,6 @@ public void setCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver c
251263
* <p>Default is to search all specified packages for classes annotated with
252264
* {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable}
253265
* or {@code @javax.persistence.MappedSuperclass}.
254-
* @since 4.2
255266
* @see #setPackagesToScan
256267
*/
257268
public void setEntityTypeFilters(TypeFilter... entityTypeFilters) {
@@ -444,6 +455,10 @@ public void afterPropertiesSet() throws IOException {
444455
sfb.setJtaTransactionManager(this.jtaTransactionManager);
445456
}
446457

458+
if (this.multiTenantConnectionProvider != null) {
459+
sfb.setMultiTenantConnectionProvider(this.multiTenantConnectionProvider);
460+
}
461+
447462
if (this.currentTenantIdentifierResolver != null) {
448463
sfb.setCurrentTenantIdentifierResolver(this.currentTenantIdentifierResolver);
449464
}

spring-orm-hibernate5/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.hibernate.cfg.AvailableSettings;
4444
import org.hibernate.cfg.Configuration;
4545
import org.hibernate.cfg.Environment;
46+
import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
4647
import org.hibernate.engine.spi.SessionFactoryImplementor;
4748

4849
import org.springframework.core.io.Resource;
@@ -183,12 +184,21 @@ else if (jtaTransactionManager instanceof TransactionManager) {
183184
return this;
184185
}
185186

187+
/**
188+
* Set a {@link MultiTenantConnectionProvider} to be passed on to the SessionFactory.
189+
* @since 4.3
190+
* @see AvailableSettings#MULTI_TENANT_CONNECTION_PROVIDER
191+
*/
192+
public LocalSessionFactoryBuilder setMultiTenantConnectionProvider(MultiTenantConnectionProvider multiTenantConnectionProvider) {
193+
getProperties().put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider);
194+
return this;
195+
}
196+
186197
/**
187198
* Specify custom type filters for Spring-based scanning for entity classes.
188199
* <p>Default is to search all specified packages for classes annotated with
189200
* {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable}
190201
* or {@code @javax.persistence.MappedSuperclass}.
191-
* @since 4.2
192202
* @see #scanPackages
193203
*/
194204
public LocalSessionFactoryBuilder setEntityTypeFilters(TypeFilter... entityTypeFilters) {

0 commit comments

Comments
 (0)