关于Hibernate的threadlocal方式管理

 

 

package  jp.ne.biglobe.svpf.front.rcv.common;

import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;
import  org.hibernate.HibernateException;
import  org.hibernate.Session;
import  org.hibernate.SessionFactory;
import  org.hibernate.Transaction;
import  org.hibernate.cfg.Configuration;

/**
 * 
 * 
@author  pengyi
 *
 
*/
public   class  HibernateUtil {

    
private   static  Log log  =  LogFactory.getLog(HibernateUtil. class );

    
private   static  SessionFactory sessionFactory;

    
private   static   final  ThreadLocal < Session >  threadSession  =   new  ThreadLocal < Session > ();

    
private   static   final  ThreadLocal < Transaction >  threadTransaction  =   new  ThreadLocal < Transaction > ();

    
/**
     * 
     * 
@return
     
*/
    
public   static  SessionFactory getSessionFactory() {
        
if  (sessionFactory  ==   null ) {
            
try  {
                
//  Create the SessionFactory
                sessionFactory  =   new  Configuration().configure()
                        .buildSessionFactory();
            } 
catch  (HibernateException ex) {
                ex.printStackTrace();
                
throw   new  RuntimeException( " Configuration problem:  "
                        
+  ex.getMessage(), ex);
            }
        }
        
return  sessionFactory;
    }

    
/**
     * 
     * 
@return
     * 
@throws  HibernateException
     
*/
    
public   static  Session currentSession()  throws  HibernateException {
        Session s 
=  (Session) threadSession.get();
        
//  Open a new Session, if this Thread has none yet
         if  (s  ==   null ) {
            s 
=  getSessionFactory().openSession();
            log.debug(
" ###Opening new Session for this thread: "   +  s);
            threadSession.set(s);
        } 
else  {
            log.debug(
" ###Session was existed: "   +  s);
        }
        
return  s;
    }

    
/**
     * 
     * 
@throws  HibernateException
     
*/
    
public   static   void  closeSession()  throws  HibernateException {
        Session s 
=  (Session) threadSession.get();
        threadSession.set(
null );
        
if  (s  !=   null ) {
            log.debug(
" ###Closing Session of this thread.  "   +  s);
            s.close();
        }
    }

    
/**
     * 
     * 
@throws  HibernateException
     
*/
    
public   static   void  beginTransaction()  throws  HibernateException {
        Transaction tx 
=  (Transaction) threadTransaction.get();
        
try  {
            
if  (tx  ==   null ) {
                tx 
=  currentSession().beginTransaction();
                log
                        .debug(
" ###Starting new database transaction in this thread: "
                                
+  tx);
                threadTransaction.set(tx);
            } 
else  {
                log.debug(
" ###Tx was existed: "   +  tx);
            }
        } 
catch  (HibernateException ex) {
            
throw  ex;
        }
    }

    
/**
     * 
     * 
@throws  HibernateException
     
*/
    
public   static   void  commitTransaction()  throws  HibernateException {
        Transaction tx 
=  (Transaction) threadTransaction.get();
        
try  {
            
if  (tx  !=   null   &&   ! tx.wasCommitted()  &&   ! tx.wasRolledBack()) {
                log.debug(
" ###Committing database transaction of this thread. " );
                tx.commit();
            }
            threadTransaction.set(
null );
        } 
catch  (HibernateException ex) {
            rollbackTransaction();
            
throw  ex;
        }
    }

    
/**
     * 
     * 
@throws  HibernateException
     
*/
    
public   static   void  rollbackTransaction()  throws  HibernateException {
        Transaction tx 
=  (Transaction) threadTransaction.get();
        
try  {
            threadTransaction.set(
null );
            
if  (tx  !=   null   &&   ! tx.wasCommitted()  &&   ! tx.wasRolledBack()) {
                log
                        .debug(
" ###Tyring to rollback database transaction of this thread. " );
                tx.rollback();
            }
        } 
catch  (HibernateException ex) {
            
throw  ex;
        } 
finally  {
            closeSession();
        }
    }
    
    
/**
     * 
     * 
@throws  HibernateException
     
*/
    
public   static   void  flush()  throws  HibernateException {
        Session s 
=  currentSession();

        
if  (s  !=   null ) {
            s.flush();
            log.debug(
" ###Session was flushed: "   +  s);
        }

    }

}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值