hibernate session和thread绑定

1.在hibernate 中hibernate.cfg.xml 配置文件加:

<property name="current_session_context_class">thread</property>


官方对他的解释如下:
首先,只要你持有SessionFactory,大可在任何时候、任何地点调用这个方法:getCurrentSession()
方法总会返回“当前的”工作单元。记得我们在hibernate.cfg.xml中把这一配置选项调整为"thread"了吗?
因此,当前工作单元的范围就是当前执行我们应用程序的Java线程。但是,这并非总是正确的。
Session在第一次被使用的时候,或者第一次调用getCurrentSession()的时候,其生命周期就开始。
然后它被Hibernate绑定到当前线程。当事务结束的时候,不管是提交还是回滚,Hibernate也会把
Session从当前线程剥离,并且关闭它。假若你再次调用getCurrentSession(),你会得到一个新的Session,并且开始一个新的工作单元。

得到的Session总是当前线程的Session,这就是所谓的线程绑定。


2.getSession()方法和SessionFactory.getCurrentSession()有什么异同呢?

相同的地方是:第一次调用getSession()或SessionFactory.getCurrentSession()时,打开新Session,并把它与当前线程绑定。
不同的地方是:当事务被Commit时,SessionFactory.getCurrentSession()返回的Session会自动关闭,而
getSession()返回的Session仍然打开,需要显式关闭才行(也许是为了便于线程内重用吧)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值