查询方法加 @Transactional注解会有什么效果
时间: 2023-10-27 21:53:09 浏览: 269
当一个方法被 @Transactional 注解标记时,它会被视为一个事务性方法。当方法开始时,Spring框架会自动创建一个事务,并且在方法执行完后会根据方法执行的结果选择提交或回滚该事务。如果方法执行成功,事务会被提交,如果方法执行失败,事务会被回滚,这样保证了数据的一致性和完整性。同时,@Transactional注解还提供了一些参数可以控制事务,例如传播行为、隔离级别、只读属性等。
相关问题
@Transactional 嵌套@Transactional
@Transactiona注解是Spring框架中用来实现事务管理的注解之一。它可以应用于方法或类级别,并用于标识希望被事务管理的方法或类。当一个方法被标记为@Transactional时,它将在方法执行期间启用事务机制。
关于嵌套@Transactional,引用提到了对子事务的定义和作用。在没有嵌套事务的情况下,如果一个方法A被标记为@Transactional,而方法A又调用了另一个被标记为@Transactional的方法B,那么方法B将会被包含在方法A的事务中。这种情况下,无法实现方法B独立提交或回滚。因此,如果我们想要实现方法B的独立事务控制,就需要使用嵌套@Transactional。
然而,嵌套事务并不是默认情况下就会生效的。实际上,Spring默认的事务传播行为是PROPAGATION_REQUIRED,它会将嵌套事务合并到外层事务中。这意味着,如果嵌套事务失败,整个事务将会回滚。
要使嵌套事务生效,可以通过修改事务传播行为来实现。例如,将内层方法的@Transactional注解的传播行为设置为PROPAGATION_REQUIRES_NEW,即使用@Transactional(propagation = Propagation.REQUIRES_NEW)。这样做的效果是,内层方法将会独立创建一个新的事务,并不会受到外层事务的影响。这样,即使内层事务失败,外层事务也会继续提交。
总结起来,@Transactional注解可以用于实现事务管理,而嵌套@Transactional可以用于实现方法的独立事务控制。通过修改事务传播行为,我们可以实现嵌套事务的独立提交和回滚。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Spring的@Transactional 嵌套研究](https://blog.csdn.net/wang_lianjie/article/details/103574836)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [@Transactional嵌套事务失效异常Transaction rolled back because it has been marked as rollback-only](https://blog.csdn.net/xiyang_1990/article/details/125870203)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
@Transactional
@Transactional 是一个注解,用于在 Spring 框架中控制事务的行为。它可以应用在类级别或方法级别,用于标识需要进行事务管理的代码。
当 @Transactional 注解应用在类级别时,它将应用于类中的所有公共方法。当应用在方法级别时,它只应用于被注解的方法。
使用 @Transactional 注解可以达到以下效果:
- 开启一个新的事务
- 提交事务
- 回滚事务
- 设置事务的隔离级别
- 设置事务的传播行为
事务是数据库操作的一种机制,用于确保数据的一致性和完整性。在一次事务中,要么所有的操作都成功执行并永久生效,要么所有的操作都回滚并取消对数据库的任何修改。
使用 @Transactional 注解可以简化事务管理的代码,并且提供了灵活的配置选项,可以根据实际需要进行调整。
阅读全文