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来管理,而不用手动提交,简单很多,我很奇怪,做的明明是业务系统,为什么使用的却是自动提交的方式,并且存在问题是必须的,这些问题会随着时间逐渐显露,至于为什么,我也不了解了

你可能感兴趣的:(Hibernate,数据库,事务,工程师,autocommit)