Hibernate和jdbc事务原理

本文探讨了在使用SpringMVC和Hibernate时,事务配置与数据库操作的关系,特别是关于Hibernate事务如何影响数据库交互及错误处理机制。通过实例分析,解释了为何在服务层方法间嵌套事务时,正确配置事务名的重要性,以及Hibernate事务不仅仅用于回滚操作,还负责事务的提交。深入阐述了conn.setAutoCommit(false)方法的作用和事务控制原理。

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

菜鸟就是菜鸟,不遇到问题还发现不了自己错在哪了...........


昨天遇到问题,(使用的springMVC和Hibernate,事务是配置的数据源 匹配方法名来加事务的),在几个service的方法之间嵌套使用时,发现修改数据数据库没变,我以为是几个service相互嵌套 事务加在了最外层 内层的不用加了就,只需要内层的向上抛出异常便可。到最后发现内层的方法中修改新增的地方修改不了。 仔细查找发现内层的service方法名 不是按照匹配的格式写的(save/del....)之类的,然后我手动加上@Transactional 事务标签,竟然好了.....
之前一直以为 加事务是为了出错时候事务回滚,没发现hibernate的事务不仅仅是回滚,还要事务的提交 !!并且在项目中一般是只有一层事务的,就是指的你程序的那一层控制。仔细搜了下原来如此:


  在Hibernate中, Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,所以你最后不写 commit也没有关系,由于Hibernate已经把AutoCommit给关掉了,所以用Hibernate的时候,你在程序中不写Transaction的话,数据库根本就没有反应。
conn.setAutoCommit(false) 这个方法中的参数如下:

true:sql命令的提交(commit)由驱动程序负责false:sql命令的提交由应用程序负责,程序必须调用commit或者rollback方法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值