Hibernate学习笔记——SessionFactory.getCurrentSession()

Hibernate Session获取方法大致有两种:
方法1. SessionFactory.openSession();
方法2. SessionFactory.getCurrentSession();
以前自己写代码都是用方法1取session。今天学会了方法2,以后就可以用它来提高效率了:

1.在xml或properties文件里设置current_session_context_class,例如:
hibernate.current_session_context_class=thread
这里用的是基于ThreadLocal的ThreadLocalSessionContext类。Hibernate还提供了其他的类,近期计划学习一下JTA。
2.然后就可以取Session了:
Session sessionOne  =  factory.getCurrentSession();
之后当我对Session操作的时候抛出了"*** is not valid without active transaction"的异常,查资料才发现用方法2取得的Session必须和Transaction配套使用,即使只是进行search操作:
sessionOne.beginTransaction();
// CRUD..

最后贴一段代码:
@Test    
public   void  testSession()  throws  Exception{      
        
    Session sessionOne 
=  factory.getCurrentSession();        
    sessionOne.beginTransaction();
// important.
    System.out.println( " session1:  "   +  sessionOne.getFlushMode() );
        
    Session sessionTwo 
=  factory.getCurrentSession();
    sessionTwo.beginTransaction();
    System.out.println(
" session2:  "   +  sessionTwo.getFlushMode() );
        
    sessionOne.setFlushMode(FlushMode.ALWAYS);
    System.out.println(
" session1:  "   +  sessionOne.getFlushMode() );
    System.out.println(
" session2:  "   +  sessionTwo.getFlushMode() );
        
    
// notice!
    System.out.println( " sessionOne equals sessionTwo?  "   +  (sessionOne.equals(sessionTwo)) );                
        
    
//need not.
    
//sessionOne.close();
    
//sessionTwo.close();

    //2009/02/09 更新
    //在用getCurrentSession获得session的时候,如果transaction.commit()的话,session会自动被关闭。
    //如果没有commit的话,还是需要手动关闭才行!


}
Print out:
session1: AUTO
session2: AUTO
session1: ALWAYS
session2: ALWAYS
sessionOne equals sessionTwo? false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值