例说Hibernate的openSession和getCurrentSession区别

通过实例代码解析Hibernate的openSession和getCurrentSession在事务控制中的不同。openSession每次打开新session,而getCurrentSession获取当前线程绑定的session,便于事务跨方法管理。在Service层控制事务更利于业务逻辑和数据库操作的分层。文中演示了在Service层使用getCurrentSession实现事务的例子,展示正确事务边界的重要性。
摘要由CSDN通过智能技术生成

很多资料从理论上解释HibernateopenSessiongetCurrentSession的区别,本人写了几个程序来理解它们的区别,在这里和大家分享一下。

简单来说,openSession是打开一个新的session,而getCurrentSession则是获取当前线程里的session,如果没有才打开新的

hibernate可以通过session来控制事务,有了getCurrentSession方法意味着可以将对数据库的操作代码放到不同的地方(不同类的方法中),这样事务控制起来极为方便。在实际开发中,业务逻辑和数据库操作一般会分层,也就是Service层和DAO层。DAO只是单纯的操作数据库,不包含业务逻辑;而Service中的一个业务逻辑可能包含多个数据库操作。

例如:业务逻辑要求向数据库中的用户表增加一个用户,同时向日志表中加入一条日志,而这需要调用DAO的两个方法(UserDaosaveUserLogDaosaveLog)。这显然是一个事务,也就是如果一个操作出现了问题,就要回滚到初始的状态。那么如何在Service层控制事务呢,本文就以此例的代码说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值