Support for "cacheRegionFactory" injection with Hibernate 5
Issue: SPR-17043
This commit is contained in:
		
							parent
							
								
									333ec7400e
								
							
						
					
					
						commit
						93d91219fd
					
				|  | @ -27,6 +27,7 @@ import org.hibernate.boot.MetadataSources; | |||
| import org.hibernate.boot.model.naming.ImplicitNamingStrategy; | ||||
| import org.hibernate.boot.model.naming.PhysicalNamingStrategy; | ||||
| import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; | ||||
| import org.hibernate.cache.spi.RegionFactory; | ||||
| import org.hibernate.cfg.Configuration; | ||||
| import org.hibernate.context.spi.CurrentTenantIdentifierResolver; | ||||
| import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider; | ||||
|  | @ -109,6 +110,9 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 	@Nullable | ||||
| 	private Object jtaTransactionManager; | ||||
| 
 | ||||
| 	@Nullable | ||||
| 	private RegionFactory cacheRegionFactory; | ||||
| 
 | ||||
| 	@Nullable | ||||
| 	private MultiTenantConnectionProvider multiTenantConnectionProvider; | ||||
| 
 | ||||
|  | @ -116,10 +120,10 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 	private CurrentTenantIdentifierResolver currentTenantIdentifierResolver; | ||||
| 
 | ||||
| 	@Nullable | ||||
| 	private TypeFilter[] entityTypeFilters; | ||||
| 	private Properties hibernateProperties; | ||||
| 
 | ||||
| 	@Nullable | ||||
| 	private Properties hibernateProperties; | ||||
| 	private TypeFilter[] entityTypeFilters; | ||||
| 
 | ||||
| 	@Nullable | ||||
| 	private Class<?>[] annotatedClasses; | ||||
|  | @ -259,7 +263,7 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set a Hibernate 5.0 ImplicitNamingStrategy for the SessionFactory. | ||||
| 	 * Set a Hibernate 5 {@link ImplicitNamingStrategy} for the SessionFactory. | ||||
| 	 * @see Configuration#setImplicitNamingStrategy | ||||
| 	 */ | ||||
| 	public void setImplicitNamingStrategy(ImplicitNamingStrategy implicitNamingStrategy) { | ||||
|  | @ -267,7 +271,7 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set a Hibernate 5.0 PhysicalNamingStrategy for the SessionFactory. | ||||
| 	 * Set a Hibernate 5 {@link PhysicalNamingStrategy} for the SessionFactory. | ||||
| 	 * @see Configuration#setPhysicalNamingStrategy | ||||
| 	 */ | ||||
| 	public void setPhysicalNamingStrategy(PhysicalNamingStrategy physicalNamingStrategy) { | ||||
|  | @ -284,6 +288,18 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 		this.jtaTransactionManager = jtaTransactionManager; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set the Hibernate {@link RegionFactory} to use for the SessionFactory. | ||||
| 	 * Allows for using a Spring-managed {@code RegionFactory} instance. | ||||
| 	 * <p>Note: If this is set, the Hibernate settings should not define a | ||||
| 	 * cache provider to avoid meaningless double configuration. | ||||
| 	 * @since 5.1 | ||||
| 	 * @see LocalSessionFactoryBuilder#setCacheRegionFactory | ||||
| 	 */ | ||||
| 	public void setCacheRegionFactory(RegionFactory cacheRegionFactory) { | ||||
| 		this.cacheRegionFactory = cacheRegionFactory; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set a {@link MultiTenantConnectionProvider} to be passed on to the SessionFactory. | ||||
| 	 * @since 4.3 | ||||
|  | @ -301,17 +317,6 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 		this.currentTenantIdentifierResolver = currentTenantIdentifierResolver; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Specify custom type filters for Spring-based scanning for entity classes. | ||||
| 	 * <p>Default is to search all specified packages for classes annotated with | ||||
| 	 * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} | ||||
| 	 * or {@code @javax.persistence.MappedSuperclass}. | ||||
| 	 * @see #setPackagesToScan | ||||
| 	 */ | ||||
| 	public void setEntityTypeFilters(TypeFilter... entityTypeFilters) { | ||||
| 		this.entityTypeFilters = entityTypeFilters; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set Hibernate properties, such as "hibernate.dialect". | ||||
| 	 * <p>Note: Do not specify a transaction provider here when using | ||||
|  | @ -334,6 +339,17 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 		return this.hibernateProperties; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Specify custom type filters for Spring-based scanning for entity classes. | ||||
| 	 * <p>Default is to search all specified packages for classes annotated with | ||||
| 	 * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable} | ||||
| 	 * or {@code @javax.persistence.MappedSuperclass}. | ||||
| 	 * @see #setPackagesToScan | ||||
| 	 */ | ||||
| 	public void setEntityTypeFilters(TypeFilter... entityTypeFilters) { | ||||
| 		this.entityTypeFilters = entityTypeFilters; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Specify annotated entity classes to register with this Hibernate SessionFactory. | ||||
| 	 * @see Configuration#addAnnotatedClass(Class) | ||||
|  | @ -546,6 +562,10 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 			sfb.setBeanContainer(this.beanFactory); | ||||
| 		} | ||||
| 
 | ||||
| 		if (this.cacheRegionFactory != null) { | ||||
| 			sfb.setCacheRegionFactory(this.cacheRegionFactory); | ||||
| 		} | ||||
| 
 | ||||
| 		if (this.multiTenantConnectionProvider != null) { | ||||
| 			sfb.setMultiTenantConnectionProvider(this.multiTenantConnectionProvider); | ||||
| 		} | ||||
|  | @ -554,14 +574,14 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator | |||
| 			sfb.setCurrentTenantIdentifierResolver(this.currentTenantIdentifierResolver); | ||||
| 		} | ||||
| 
 | ||||
| 		if (this.entityTypeFilters != null) { | ||||
| 			sfb.setEntityTypeFilters(this.entityTypeFilters); | ||||
| 		} | ||||
| 
 | ||||
| 		if (this.hibernateProperties != null) { | ||||
| 			sfb.addProperties(this.hibernateProperties); | ||||
| 		} | ||||
| 
 | ||||
| 		if (this.entityTypeFilters != null) { | ||||
| 			sfb.setEntityTypeFilters(this.entityTypeFilters); | ||||
| 		} | ||||
| 
 | ||||
| 		if (this.annotatedClasses != null) { | ||||
| 			sfb.addAnnotatedClasses(this.annotatedClasses); | ||||
| 		} | ||||
|  |  | |||
|  | @ -40,6 +40,7 @@ import org.hibernate.MappingException; | |||
| import org.hibernate.SessionFactory; | ||||
| import org.hibernate.boot.MetadataSources; | ||||
| import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; | ||||
| import org.hibernate.cache.spi.RegionFactory; | ||||
| import org.hibernate.cfg.AvailableSettings; | ||||
| import org.hibernate.cfg.Configuration; | ||||
| import org.hibernate.context.spi.CurrentTenantIdentifierResolver; | ||||
|  | @ -257,6 +258,19 @@ public class LocalSessionFactoryBuilder extends Configuration { | |||
| 		return this; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set the Hibernate {@link RegionFactory} to use for the SessionFactory. | ||||
| 	 * Allows for using a Spring-managed {@code RegionFactory} instance. | ||||
| 	 * <p>Note: If this is set, the Hibernate settings should not define a | ||||
| 	 * cache provider to avoid meaningless double configuration. | ||||
| 	 * @since 5.1 | ||||
| 	 * @see AvailableSettings#CACHE_REGION_FACTORY | ||||
| 	 */ | ||||
| 	public LocalSessionFactoryBuilder setCacheRegionFactory(RegionFactory cacheRegionFactory) { | ||||
| 		getProperties().put(AvailableSettings.CACHE_REGION_FACTORY, cacheRegionFactory); | ||||
| 		return this; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set a {@link MultiTenantConnectionProvider} to be passed on to the SessionFactory. | ||||
| 	 * @since 4.3 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue