hibernate的hibernate.connection.autocommit值为什么建议设置为false

做了不少项目,遇到不少hibernate配置,对于 hibernate .connection. autocommit值的设置,存在很多争议,一些人认为应该设置为true,一些人认为应该设置为false,而我坚决选择后者,下面就来讲讲我的理由吧

1、当在做业务系统的时候,大家都知道会在同一个操作中,一个业务可能包含多个子业务,那么就要进行多次提交,假设“业务A”中包含“子业务1”、“子业务2”、“子业务3”,如果是自动提交,那么可能的结果是子业务的其中一项或两项提交成功,而另一项提交失败,会回滚(这样的结果明显不符合我们惯有的思维);正确的结果,应该是,只要有一项提交失败,那么全体回滚。以事务的角度来说,整体应该属于同一事务,而自动提交的方式,明显不属于同一事务,数据混乱,也是难免的

2、对于并发写入比较高的应用,应尽量减少数据库交互,而hibernate框架一般都是单条操作,若想批量提交,hibernate.connection.autocommit值是必须设置为false的,常用的手段就是在此值设置为false的情况下,将要insert或者update的对象放到集合中,使用merge方法与flush结合的方式进行批量提交


不少人(包括经验丰富的老工程师)都认为,为什么使用hibernate,为什么使用自动提交,就是因为其方便,事务由hibernate来管理,而不用手动提交,简单很多,我很奇怪,做的明明是业务系统,为什么使用的却是自动提交的方式,并且存在问题是必须的,这些问题会随着时间逐渐显露,至于为什么,我也不了解了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值