事务:工作方式,作用范围。 什么情况下该用事务,什么情况下可以不用。
先要知道什么是事务?
事务是一系列操作组成的工作单元。具有不可分割性。
传播行为:传播行为定义了事务应用于方法上之边界,它告知何时开始一个新的事务,或何时事务该被暂停。或方法是否要在事物中进行。所以根据这个定义,可以知道事务的工作范围。
对事务的工作方式我是这样理解的,将业务中所有的sql语句都一起执行,正确则执行成功,否则就rollback。根据:
Try(
...
connection.setAutoCommit(false);
.....
//一连串sql操作
Connection.commit();
)catch(SQLException){
//发生错误,撤销所有变更
Connection.rollback();
}
这个是在Jdbc。操作Connection的setAutoCommit()方法,给定false参数,在下达一连串sql语句后,自动执行Connection的commit()来送出变更,如果中间发生错误,则执行rollback()来撤销所有的执行。
对于什么情况下该用事务,什么情况下可以不用这个问题。
那就是如果执行的是一条sql语句,如果错误则报错,而上面是多条sql语句在一起执行,如果一条有问题,那么就回滚。所以在只有一条sql语句的时候不用,而多条就得用。刚才试了一下,证明了此猜测,我将OpenSessionInViewFilter和@Transactional都注解掉了,结果删除一条数据(只用了一条sql语句)成功了。再然后我需要在事务中进行两个操作。将@Transactional注解了,就失败了。
接下来,深入理解事物属性。