LocalSessionFactoryBuilder/Bean supports setMultiTenantConnectionProvider

Issue: SPR-14072
This commit is contained in:
Juergen Hoeller 2016-03-19 13:48:54 +01:00
parent a1a06cd665
commit 5f6406430f
2 changed files with 27 additions and 2 deletions

View File

@ -29,6 +29,7 @@ import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.hibernate.context.spi.CurrentTenantIdentifierResolver; 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.DisposableBean;
import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.FactoryBean;
@ -85,6 +86,8 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
private Object jtaTransactionManager; private Object jtaTransactionManager;
private MultiTenantConnectionProvider multiTenantConnectionProvider;
private CurrentTenantIdentifierResolver currentTenantIdentifierResolver; private CurrentTenantIdentifierResolver currentTenantIdentifierResolver;
private TypeFilter[] entityTypeFilters; private TypeFilter[] entityTypeFilters;
@ -238,6 +241,15 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
this.jtaTransactionManager = jtaTransactionManager; 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. * Set a {@link CurrentTenantIdentifierResolver} to be passed on to the SessionFactory.
* @see LocalSessionFactoryBuilder#setCurrentTenantIdentifierResolver * @see LocalSessionFactoryBuilder#setCurrentTenantIdentifierResolver
@ -251,7 +263,6 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
* <p>Default is to search all specified packages for classes annotated with * <p>Default is to search all specified packages for classes annotated with
* {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable}
* or {@code @javax.persistence.MappedSuperclass}. * or {@code @javax.persistence.MappedSuperclass}.
* @since 4.2
* @see #setPackagesToScan * @see #setPackagesToScan
*/ */
public void setEntityTypeFilters(TypeFilter... entityTypeFilters) { public void setEntityTypeFilters(TypeFilter... entityTypeFilters) {
@ -444,6 +455,10 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
sfb.setJtaTransactionManager(this.jtaTransactionManager); sfb.setJtaTransactionManager(this.jtaTransactionManager);
} }
if (this.multiTenantConnectionProvider != null) {
sfb.setMultiTenantConnectionProvider(this.multiTenantConnectionProvider);
}
if (this.currentTenantIdentifierResolver != null) { if (this.currentTenantIdentifierResolver != null) {
sfb.setCurrentTenantIdentifierResolver(this.currentTenantIdentifierResolver); sfb.setCurrentTenantIdentifierResolver(this.currentTenantIdentifierResolver);
} }

View File

@ -43,6 +43,7 @@ import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment; import org.hibernate.cfg.Environment;
import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
@ -183,12 +184,21 @@ public class LocalSessionFactoryBuilder extends Configuration {
return this; 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. * Specify custom type filters for Spring-based scanning for entity classes.
* <p>Default is to search all specified packages for classes annotated with * <p>Default is to search all specified packages for classes annotated with
* {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable}
* or {@code @javax.persistence.MappedSuperclass}. * or {@code @javax.persistence.MappedSuperclass}.
* @since 4.2
* @see #scanPackages * @see #scanPackages
*/ */
public LocalSessionFactoryBuilder setEntityTypeFilters(TypeFilter... entityTypeFilters) { public LocalSessionFactoryBuilder setEntityTypeFilters(TypeFilter... entityTypeFilters) {