Transactional()
时间: 2023-08-27 15:20:37 浏览: 30
Transactional(propagation = Propagation.NESTED)是一个Spring框架中的注解,用于在方法上定义事务的传播行为。在引用中的示例代码中,当执行methodA()方法时,会先执行doSomeThingA()方法,然后调用methodB()方法,最后执行doSomeThingB()方法。在methodB()方法上标注了@Transactional(propagation = Propagation.NESTED),表示在当前事务存在的情况下执行嵌套事务。这意味着methodB()方法会在一个新的事务中执行,并且该事务会嵌套在methodA()方法的事务中。
引用中给出了一个关于@Transactional(propagation = Propagation.NESTED)的具体执行流程的示例代码。在执行methodA()方法时,首先会开启一个新的事务,然后执行doSomeThing()方法,接着挂起当前事务,并再次开启一个新的事务,然后调用methodB()方法,在methodB()方法执行完后,恢复第一个事务,并继续执行doSomeThingB()方法,最后提交第一个事务。
然而,在引用中的示例代码中,当调用methodA()方法时,由于methodB()方法被标注为@Transactional(propagation = Propagation.NEVER),表示以非事务的方式运行,如果当前存在事务,则会抛出IllegalTransactionStateException异常。因此,该错误提示org.springframework.transaction.IllegalTransactionStateException: Existing transaction found for transaction marked with propagation 'never'。
综上所述,@Transactional(propagation = Propagation.NESTED)用于定义在方法中执行嵌套事务的传播行为,它可以使方法在一个新的事务中执行,并且该事务会嵌套在外部事务中。然而,如果嵌套事务被标注为Propagation.NEVER,则会抛出异常。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [事务 Transactional注解](https://blog.csdn.net/liumeng0906/article/details/125989910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]