目录事务是什么?为什么要使用事务?如何使用事务?事务的传播带来的几种结果两个特例:propagation属性事务是什么?ACID,事务内的一组操作具有 原子性 、一致性、隔离性、持久性。 Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 Consistency(一致性):.
1 什么是 @
Transactional
声明式
事务
管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个
事务
,在执行完目标方法之后根据执行情况提交或者回滚
事务
。
2 如何使用 @
Transactional
@
Transactional
(rollbackFor=Exception.class)
如果加了这个注解...
@
Transactional
(isolation = Isolation.READ_COMMITTED)//读已提交 脏读
要求Transaction01只能读取Transaction02已提交的修改。
解决不可重复读
@
Transactional
(isolation = Isolation.REPEATABLE_READ)//
事务
隔离级别,可重复读(行锁)
解决
幻读
@
Transactional
(isolation = Isolation.SERIALIZABLE)//
事务
隔离级别,串
今天,有一个非常简单的业务需求,就是简单的删除数据以及它所联动的其他的表的记录。可是,今天,我犯了一个非常低级的错误。就是:
首先的话,我是先在主表删除了那条记录,然后根据记录
中
的主键去删除从表的数据,由于没有加上
事务
管理。当我测试去操作这个业务的时候,它返回删除失败,但是刷新之后,发现主表的数据已经没了,但是从表的数据却还在,发生了异常。
这是因为,主表
中
的数据已经没了,而删除从表
中
的数据需要根据主表
中
的主键。由此发生了异常,而我也没有添加上
事务
管理。
我们应该先删除从表的数据,最后再删除主表
中
的
日常打BUG: