【学习】opensession 与getCurrentsession的区别

本文详细解释了Hibernate中getCurrentSession与openSession的区别。getCurrentSession通过线程绑定并自动管理,适用于需要事务的操作;而openSession需要手动管理,适合简单的查询场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、getCurrentSession()与openSession()的区别?

* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
创建的session则不会
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()
创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>

hibernate的openSession方法是每次都去新建一个session 需要自己关闭 这个方法大家应该都了解,3.2以后 getCurrentSession 出了一个优化版的session 他用到了一个session池来进行管理,类似于jdbc的连接池 用完 这个session会自动被回收也就是关闭 但没有实际的关闭 下次在调用直接从池里面去取。这个就比openSession优化了
他还能自己关闭。
但是 这样getCurrentSession 也牺牲了其他方面
只要涉及查询更新操作都要声明事物
声明事物就以为着获取物理连接 其次是耗时
个人认为 延迟加载对他来说应该没意义了
好多人开发人员 都以为getCurrentSession 不用自己写关闭方法 所以好用都用他
在查询的时候也去用 也去声明事物
所以这就是个误区
查询时候咱们可以用openSession  更新操作就去用 getCurrentSession

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值