
getCurrentSession()与openSession()的区别?
发布日期:2021-05-07 01:42:57
浏览次数:15
分类:精选文章
本文共 1236 字,大约阅读时间需要 4 分钟。
getCurrentSession()与openSession()的区别及使用方法
在Hibernate中,getCurrentSession()和openSession()是两个常用的方法来获取Session对象,它们有着不同的特点和适用场景。以下是它们的区别和使用方法的详细说明。
1. getCurrentSession()与openSession()的主要区别
-
绑定与非绑定:
getCurrentSession()创建的Session会绑定到当前线程中,意味着这个Session会随着线程的生命周期一起管理。 openSession()创建的Session则不会绑定到任何线程,具有一定的独立性。 -
事务管理:
getCurrentSession()创建的Session在进行commit或rollback操作时会自动关闭。 openSession()创建的Session则需要手动关闭,否则可能会导致资源泄漏或其他问题。
2. 使用getCurrentSession()需要注意的事项
-
配置文件设置:
如果你使用的是本地事务(jdbc事务),需要在hibernate.cfg.xml文件中添加以下配置:thread 这会使得Hibernate使用基于线程的SessionContext。
-
JTA事务支持:
如果你使用的是全局事务(JTA事务),则需要配置:jta 这样Hibernate会在JTA环境下管理Session。
3. openSession()与getCurrentSession()的关联及适用场景
-
SessionFactory启动时的配置:
SessionFactory在启动时会根据配置创建相应的CurrentSessionContext。 当调用getCurrentSession()时,实际执行的是CurrentSessionContext.currentSession()方法。 如果当前Session为空,会调用SessionFactory的openSession()方法来创建一个新的Session。 -
Java EE环境下的优势:
getCurrentSession()在Java EE环境下是获取Session的更好方法,因为它可以利用JTA事务进行管理,简化了Session的生命周期控制。
4. 常见问题与解决方案
-
Session关闭异常:
系统在commit()执行完后自动关闭Session,手动再次关闭会导致错误。这是由于配置文件中设置了thread类型的SessionContext导致的。 -
事务管理与Session生命周期:
在使用getCurrentSession()时,确保在完成操作后或遇到异常时手动关闭Session,以避免资源泄漏。
通过理解这些区别和使用方法,你可以更高效地管理Hibernate Session,确保应用的稳定性和性能。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月14日 22时47分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上周热点回顾(10.20-10.26)
2019-03-06
上周热点回顾(2.16-2.22)
2019-03-06
上周热点回顾(3.2-3.8)
2019-03-06
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
2019-03-06
上周热点回顾(7.27-8.2)
2019-03-06
上周热点回顾(9.28-10.4)
2019-03-06
上周热点回顾(3.28-4.3)
2019-03-06
上周热点回顾(5.2-5.8)
2019-03-06
上周热点回顾(5.9-5.15)
2019-03-06
上周热点回顾(8.8-8.14)
2019-03-06
.NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
2019-03-06
上周热点回顾(1.16-1.22)
2019-03-06
上周热点回顾(1.23-1.29)
2019-03-06
上周热点回顾(3.20-3.26)
2019-03-06
上周热点回顾(4.24-4.30)
2019-03-06
[故障公告]博客站点1台负载均衡遭遇流量攻击,造成联通与移动用户无法正常访问
2019-03-06
上周热点回顾(5.1-5.7)
2019-03-06
上周热点回顾(5.29-6.4)
2019-03-06
上周热点回顾(6.19-6.25)
2019-03-06