Class LocalSessionFactoryBuilder
- java.lang.Object
- org.hibernate.cfg.Configuration
- org.springframework.orm.hibernate5.LocalSessionFactoryBuilder
public class LocalSessionFactoryBuilder extends Configuration
A Spring-provided extension of the standard HibernateConfiguration
class, addingSpringSessionContext
as a default and providing convenient ways to specify a JDBCDataSource
and an application class loader.This is designed for programmatic use, e.g. in
@Bean
factory methods; consider usingLocalSessionFactoryBean
for XML bean definition files. Typically combined withHibernateTransactionManager
for declarative transactions against theSessionFactory
and its JDBCDataSource
.Compatible with Hibernate 5.0/5.1 as well as 5.2/5.3/5.4, as of Spring 5.2. Set up with Hibernate 5.2+, this builder is also a convenient way to set up a JPA
EntityManagerFactory
since the HibernateSessionFactory
natively exposes the JPAEntityManagerFactory
interface as well now.This builder supports Hibernate 5.3/5.4
BeanContainer
integration,MetadataSources
from customBootstrapServiceRegistryBuilder
setup, as well as other advanced Hibernate configuration options beyond the standard JPA bootstrap contract.- Since:
- 4.2
- Author:
- Juergen Hoeller
- See Also:
HibernateTransactionManager
,LocalSessionFactoryBean
,setBeanContainer(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
,LocalSessionFactoryBuilder(DataSource, ResourceLoader, MetadataSources)
,BootstrapServiceRegistryBuilder
Field Summary
Fields inherited from class org.hibernate.cfg.Configuration
ARTEFACT_PROCESSING_ORDER
Constructor Summary
Constructors Constructor Description LocalSessionFactoryBuilder(DataSource dataSource)
Create a new LocalSessionFactoryBuilder for the given DataSource.LocalSessionFactoryBuilder(DataSource dataSource, ClassLoader classLoader)
Create a new LocalSessionFactoryBuilder for the given DataSource.LocalSessionFactoryBuilder(DataSource dataSource, ResourceLoader resourceLoader)
Create a new LocalSessionFactoryBuilder for the given DataSource.LocalSessionFactoryBuilder(DataSource dataSource, ResourceLoader resourceLoader, org.hibernate.boot.MetadataSources metadataSources)
Create a new LocalSessionFactoryBuilder for the given DataSource.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description LocalSessionFactoryBuilder
addAnnotatedClasses(Class<?>... annotatedClasses)
Add the given annotated classes in a batch.LocalSessionFactoryBuilder
addPackages(String... annotatedPackages)
Add the given annotated packages in a batch.SessionFactory
buildSessionFactory(AsyncTaskExecutor bootstrapExecutor)
Build the HibernateSessionFactory
through background bootstrapping, using the given executor for a parallel initialization phase (e.g.LocalSessionFactoryBuilder
scanPackages(String... packagesToScan)
Perform Spring-based scanning for entity classes, registering them as annotated classes with thisConfiguration
.LocalSessionFactoryBuilder
setBeanContainer(ConfigurableListableBeanFactory beanFactory)
Set a HibernateBeanContainer
for the given SpringConfigurableListableBeanFactory
.LocalSessionFactoryBuilder
setCacheRegionFactory(RegionFactory cacheRegionFactory)
Set the HibernateRegionFactory
to use for the SessionFactory.void
setCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver currentTenantIdentifierResolver)
Overridden to reliably pass aCurrentTenantIdentifierResolver
to the SessionFactory.LocalSessionFactoryBuilder
setEntityTypeFilters(TypeFilter... entityTypeFilters)
Specify custom type filters for Spring-based scanning for entity classes.LocalSessionFactoryBuilder
setJtaTransactionManager(Object jtaTransactionManager)
Set the SpringJtaTransactionManager
or the JTATransactionManager
to be used with Hibernate, if any.LocalSessionFactoryBuilder
setMultiTenantConnectionProvider(org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider multiTenantConnectionProvider)
Set aMultiTenantConnectionProvider
to be passed on to the SessionFactory.Methods inherited from class org.hibernate.cfg.Configuration
add, addAnnotatedClass, addAttributeConverter, addAttributeConverter, addAttributeConverter, addAttributeConverter, addAttributeConverter, addAuxiliaryDatabaseObject, addCacheableFile, addCacheableFile, addCacheableFileStrictly, addClass, addDirectory, addDocument, addFile, addFile, addInputStream, addJar, addPackage, addProperties, addResource, addResource, addSqlFunction, addURL, addXML, buildMappings, buildSessionFactory, buildSessionFactory, configure, configure, configure, configure, configure, getCurrentTenantIdentifierResolver, getEntityNotFoundDelegate, getEntityTuplizerFactory, getInterceptor, getNamedEntityGraphs, getNamedProcedureCallMap, getNamedQueries, getNamedSQLQueries, getProperties, getProperty, getSessionFactoryObserver, getSqlFunctions, getSqlResultSetMappings, getStandardServiceRegistryBuilder, mergeProperties, registerTypeContributor, registerTypeOverride, registerTypeOverride, registerTypeOverride, reset, setEntityNotFoundDelegate, setImplicitNamingStrategy, setInterceptor, setPhysicalNamingStrategy, setProperties, setProperty, setSessionFactoryObserver, setSharedCacheMode
Constructor Detail
LocalSessionFactoryBuilder
public LocalSessionFactoryBuilder(@Nullable DataSource dataSource)
Create a new LocalSessionFactoryBuilder for the given DataSource.- Parameters:
dataSource
- the JDBC DataSource that the resulting Hibernate SessionFactory should be using (may benull
)
LocalSessionFactoryBuilder
public LocalSessionFactoryBuilder(@Nullable DataSource dataSource, ClassLoader classLoader)
Create a new LocalSessionFactoryBuilder for the given DataSource.- Parameters:
dataSource
- the JDBC DataSource that the resulting Hibernate SessionFactory should be using (may benull
)classLoader
- the ClassLoader to load application classes from
LocalSessionFactoryBuilder
public LocalSessionFactoryBuilder(@Nullable DataSource dataSource, ResourceLoader resourceLoader)
Create a new LocalSessionFactoryBuilder for the given DataSource.- Parameters:
dataSource
- the JDBC DataSource that the resulting Hibernate SessionFactory should be using (may benull
)resourceLoader
- the ResourceLoader to load application classes from
LocalSessionFactoryBuilder
public LocalSessionFactoryBuilder(@Nullable DataSource dataSource, ResourceLoader resourceLoader, org.hibernate.boot.MetadataSources metadataSources)
Create a new LocalSessionFactoryBuilder for the given DataSource.- Parameters:
dataSource
- the JDBC DataSource that the resulting Hibernate SessionFactory should be using (may benull
)resourceLoader
- the ResourceLoader to load application classes frommetadataSources
- the Hibernate MetadataSources service to use (e.g. reusing an existing one)- Since:
- 4.3
Method Detail
setJtaTransactionManager
public LocalSessionFactoryBuilder setJtaTransactionManager(Object jtaTransactionManager)
Set the SpringJtaTransactionManager
or the JTATransactionManager
to be used with Hibernate, if any. Allows for using a Spring-managed transaction manager for Hibernate 5's session and cache synchronization, with the "hibernate.transaction.jta.platform" automatically set to it.A passed-in Spring
JtaTransactionManager
needs to contain a JTATransactionManager
reference to be usable here, except for the WebSphere case where we'll automatically setWebSphereExtendedJtaPlatform
accordingly.Note: If this is set, the Hibernate settings should not contain a JTA platform setting to avoid meaningless double configuration.
setBeanContainer
public LocalSessionFactoryBuilder setBeanContainer(ConfigurableListableBeanFactory beanFactory)
Set a HibernateBeanContainer
for the given SpringConfigurableListableBeanFactory
.Note: Bean container integration requires Hibernate 5.3 or higher. It enables autowiring of Hibernate attribute converters and entity listeners.
- Since:
- 5.1
- See Also:
SpringBeanContainer
,AvailableSettings.BEAN_CONTAINER
setCacheRegionFactory
public LocalSessionFactoryBuilder setCacheRegionFactory(RegionFactory cacheRegionFactory)
Set the HibernateRegionFactory
to use for the SessionFactory. Allows for using a Spring-managedRegionFactory
instance.Note: If this is set, the Hibernate settings should not define a cache provider to avoid meaningless double configuration.
- Since:
- 5.1
- See Also:
AvailableSettings.CACHE_REGION_FACTORY
setMultiTenantConnectionProvider
public LocalSessionFactoryBuilder setMultiTenantConnectionProvider(org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider multiTenantConnectionProvider)
Set aMultiTenantConnectionProvider
to be passed on to the SessionFactory.- Since:
- 4.3
- See Also:
AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER
setCurrentTenantIdentifierResolver
public void setCurrentTenantIdentifierResolver(CurrentTenantIdentifierResolver currentTenantIdentifierResolver)
Overridden to reliably pass aCurrentTenantIdentifierResolver
to the SessionFactory.- Overrides:
setCurrentTenantIdentifierResolver
in classConfiguration
- Since:
- 4.3.2
- See Also:
AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER
setEntityTypeFilters
public LocalSessionFactoryBuilder setEntityTypeFilters(TypeFilter... entityTypeFilters)
Specify custom type filters for Spring-based scanning for entity classes.Default is to search all specified packages for classes annotated with
@javax.persistence.Entity
,@javax.persistence.Embeddable
or@javax.persistence.MappedSuperclass
.- See Also:
scanPackages(java.lang.String...)
addAnnotatedClasses
public LocalSessionFactoryBuilder addAnnotatedClasses(Class<?>... annotatedClasses)
Add the given annotated classes in a batch.
addPackages
public LocalSessionFactoryBuilder addPackages(String... annotatedPackages)
Add the given annotated packages in a batch.
scanPackages
public LocalSessionFactoryBuilder scanPackages(String... packagesToScan) throws HibernateException
Perform Spring-based scanning for entity classes, registering them as annotated classes with thisConfiguration
.- Parameters:
packagesToScan
- one or more Java package names- Throws:
HibernateException
- if scanning fails for any reason
buildSessionFactory
public SessionFactory buildSessionFactory(AsyncTaskExecutor bootstrapExecutor)
Build the HibernateSessionFactory
through background bootstrapping, using the given executor for a parallel initialization phase (e.g. aSimpleAsyncTaskExecutor
).SessionFactory
initialization will then switch into background bootstrap mode, with aSessionFactory
proxy immediately returned for injection purposes instead of waiting for Hibernate's bootstrapping to complete. However, note that the first actual call to aSessionFactory
method will then block until Hibernate's bootstrapping completed, if not ready by then. For maximum benefit, make sure to avoid earlySessionFactory
calls in init methods of related beans, even for metadata introspection purposes.- Since:
- 4.3
- See Also:
Configuration.buildSessionFactory()