@Transaction 事务类型传播

@Transaction 事务类型传播 

 

1. REQUIRED
         事务类型:事务默认值
         事务特点:当前不存在事务则创建,存在则使用当前事务
         咋用?:加在父方法的头上,其子方法运行是在一个事务中的,也就是可以影响到子方法
    举例:
        1.给A()添加了事务,在方法C()中报错则所有都会回滚
        2.单给B()添加事务,C中报错,则B()的数据不会回滚 

2. SUPPORTS
        事务描述:支持当前事务去执行,多用于查询
        事务特点:如果当前有事务,则使用事务;如果当前没有事务,则不使用事务。

 3. MANDATORY
        事务描述:强制使用事务去执行
        事务特点:调用它的父级必须有事务,没事务则抛出异常

 4. REQUIRES_NEW
        事务描述:挂起事务形式去执行
        事务特点: 当前存在事务则挂起,创建一个新事物成为独立事务给自己使用,注意!!是两 个不同的事务,提交的时候是分别提交的。
        举例:B()、C()都要向数据库插值,在A()添加事务类型为REQUIRED, B()添加类型为REQUIRES_NEW,如果B()、C()都插值完毕,这时候报错了,B()的插值是不会回滚的!,因为B的事务是独立的! 

 5.NOT_SUPPORTED
        事务描述:挂起事务的形式去执行
        事务特点:如果存在事务,就挂起,不使用事务执行该方法。
        举例:A()事务类型为REQUIRED,B()方法的事务类型为NOT_SUPPORTED,C()报错了,B()的值不回滚

 6. NEVER
        事务描述:强制没有事务的形式去执行
        事务特点:如果调用方存在事务,则抛出错误

 7. NESTED
        事务描述:嵌套的形式去执行
        事务特点:当前存在事务则开启一个嵌套事务,以子事务的形式去执行方法,否则则默认用REQUIRED去执行,(子事务/嵌套事务:提交事务一起提交)
        举例:B()、C()插数据,B()开启事务为NESTED,A()开启事务为REQUIRED,在方法A()的结尾报错,则全部回滚,注意NESTED与REQUIRED不同之处在于:REQUIRED是当前存在事务则使用当前事务,NESTED是当前存在事务则开启一个嵌套事务去执行,达到的效果其实是一致的。

 

 

 

上一篇:Element-ui中form组件的校验规则


下一篇:表单的required 属性