Spring+Hibernate实现动态SessionFactory切换
1.配置多个数据源和SessionFactory,并给相应SessionFactory配置事务管理:
?
?
2. 为SessionFactory配置事务切面
?
?3. 配置一个动态的SessionFactory:
?
public class DynamicSessionFactory implements SessionFactory ,ApplicationContextAware{private static final long serialVersionUID = 1L;private ApplicationContext applicationContext;private SessionFactory getSessionFactory(String name) {return (SessionFactory) applicationContext.getBean(name);} //根据当前线程的SessionFactoryName获取SessionFactoryprivate SessionFactory getSessionFactory() {return getSessionFactory(ThreadLocalUtil..getSessionFactoryName());}public Reference getReference() throws NamingException {return getSessionFactory().getReference();}public Session openSession() throws HibernateException {return getSessionFactory().openSession();}public Session openSession(Interceptor interceptor)throws HibernateException {return getSessionFactory().openSession(interceptor);}public Session openSession(Connection connection) {return getSessionFactory().openSession(connection);}public Session openSession(Connection connection, Interceptor interceptor) {return getSessionFactory().openSession(connection,interceptor);}public Session getCurrentSession() throws HibernateException {return getSessionFactory().getCurrentSession();}public StatelessSession openStatelessSession() {return getSessionFactory().openStatelessSession();}public StatelessSession openStatelessSession(Connection connection) {return getSessionFactory().openStatelessSession(connection);}public ClassMetadata getClassMetadata(Class entityClass) {return getSessionFactory().getClassMetadata(entityClass);}public ClassMetadata getClassMetadata(String entityName) {return getSessionFactory().getClassMetadata(entityName);}public CollectionMetadata getCollectionMetadata(String roleName) {return getSessionFactory().getCollectionMetadata(roleName);}public Map getAllClassMetadata() {return getSessionFactory().getAllClassMetadata();}public Map getAllCollectionMetadata() {return getSessionFactory().getAllCollectionMetadata();}public Statistics getStatistics() {return getSessionFactory().getStatistics();}public void close() throws HibernateException {getSessionFactory().close();}public boolean isClosed() {return getSessionFactory().isClosed();}public Cache getCache() {return getSessionFactory().getCache();}public void evict(Class persistentClass) throws HibernateException {getSessionFactory().evict(persistentClass);}public void evict(Class persistentClass, Serializable id)throws HibernateException {getSessionFactory().evict(persistentClass, id);}public void evictEntity(String entityName) throws HibernateException {getSessionFactory().evictEntity(entityName);}public void evictEntity(String entityName, Serializable id)throws HibernateException {getSessionFactory().evictEntity(entityName, id);}public void evictCollection(String roleName) throws HibernateException {getSessionFactory().evictCollection(roleName);}public void evictCollection(String roleName, Serializable id)throws HibernateException {getSessionFactory().evictCollection(roleName, id);}public void evictQueries(String cacheRegion) throws HibernateException {getSessionFactory().evictQueries(cacheRegion);}public void evictQueries() throws HibernateException {getSessionFactory().evictQueries();}public Set getDefinedFilterNames() {return getSessionFactory().getDefinedFilterNames();}public FilterDefinition getFilterDefinition(String filterName)throws HibernateException {return getSessionFactory().getFilterDefinition(filterName);}public boolean containsFetchProfileDefinition(String name) {return getSessionFactory().containsFetchProfileDefinition(name);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext)throws BeansException {this.applicationContext = applicationContext;}}?
?
?