博客
关于我
Hibernate入门(五)---------事务管理
阅读量:423 次
发布时间:2019-03-06

本文共 1249 字,大约阅读时间需要 4 分钟。

//获取当前线程绑定的会话public static Session getCurrentSession(){     return sessionFactory.getCurrentSession(); }

在Hibernate的事务管理中,如何确保业务层和DAO层使用的Session对象一致,是一个常见的优化问题。以下是两种常见的实现方案:

1. 在业务层获取Session并将其传递给DAO层

这种方法虽然简单,但存在以下问题:如果DAO层需要进行多次数据库操作,或者需要在同一个事务中完成多个数据库事务,那么需要反复传递Session对象,这会导致代码冗余且难以管理。因此,这种方法不够高效。

2. 使用ThreadLocal将Session绑定到当前线程中

这种方法通过Hibernate的内置机制,将Session对象与当前线程绑定。具体来说,业务层获取Session后,通过ThreadLocal存储该Session对象。随后,DAO层在访问Session时,直接从ThreadLocal中获取当前的Session实例。这种方法的优势在于:Session对象的生命周期与线程绑定,当线程结束时,Session会自动关闭,无需手动管理。

在Hibernate5中,Session对象的生命周期管理可以通过以下方式实现:

a. Session对象的生命周期与本地线程绑定

b. Session对象的生命周期与JTA事务绑定

c. 使用Hibernate自身的Session管理机制

为了实现Session对象与线程绑定的效果,可以在hibernate.cfg.xml中配置如下内容:

thread

通过上述配置,Hibernate会将Session对象的生命周期与当前线程绑定。这种方式特别适合需要在单个事务中完成多个数据库操作的场景,因为它能够确保所有数据库操作都在同一个事务中完成。

此外,Hibernate提供了SessionFactory.getCurrentSession()方法,用于获取与当前线程绑定的Session对象。为了方便管理,可以自定义HibernateUtil工具类,扩展getCurrentSession方法:

//获取当前线程绑定的会话public static Session getCurrentSession(){     return sessionFactory.getCurrentSession(); }

需要注意的是,当线程结束时,Session对象会自动关闭,因此无需手动调用session.close()方法。这不仅简化了代码,也提高了性能和可靠性。

总结来说,通过配置hibernate.current_session_context_class为"thread",并在业务层获取Session后将其与当前线程绑定,可以确保Service和DAO层使用同一个Session对象。这是Hibernate事务管理中一个非常常用的优化方法。

转载地址:http://vyuuz.baihongyu.com/

你可能感兴趣的文章
Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合
查看>>
Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
查看>>
Openlayers中加载Geoserver切割的EPSG:900913离线瓦片图层组
查看>>
Openlayers中多图层遮挡时调整图层上下顺序
查看>>
Openlayers中将某个feature置于最上层
查看>>
Openlayers中点击地图获取坐标并输出
查看>>
Openlayers中设置定时绘制和清理直线图层
查看>>
Openlayers图文版实战,vue项目从0到1做基础配置
查看>>
Openlayers实战:modifystart、modifyend互动示例
查看>>
Openlayers实战:判断共享单车是否在电子围栏内
查看>>
Openlayers实战:加载Bing地图
查看>>
Openlayers实战:绘制图形,导出geojson文件
查看>>
Openlayers实战:绘制图形,导出KML文件
查看>>
Openlayers实战:绘制多边形,导出CSV文件
查看>>
Openlayers实战:绘制带箭头的线
查看>>
Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
查看>>
Openlayers实战:非4326,3857的投影
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
查看>>
Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
查看>>