@Transactional(传播=传播。必需)

2022-08-31 09:23:29

如果有人可以解释这个注释的作用以及我们何时使用它:

@Transactional(propagation=Propagation.REQUIRED)

谢谢


答案 1

如果您需要外行解释除春季文档中提供的用途之外的用法

请考虑此代码...

class Service {
    @Transactional(propagation=Propagation.REQUIRED)
    public void doSomething() {
        // access a database using a DAO
    }
}

当 doSomething() 被调用时,它知道它必须在执行之前在数据库上启动一个事务。如果此方法的调用方已启动事务,则此方法将在当前数据库连接上使用相同的物理事务。

此注释提供了一种在执行代码时告诉代码必须具有事务的方法。如果没有一个,它将无法运行,因此您可以在代码中做出这样的假设,即数据库中不会留下不完整的数据,或者在发生异常时必须清理某些内容。@Transactional

交易管理是一个相当复杂的主题,所以希望这个简化的答案是有帮助的


答案 2

PROPAGATION_REQUIRED传播设置时,将为应用该设置的每个方法创建一个逻辑事务作用域。每个这样的逻辑事务作用域都可以单独确定仅回滚状态,外部事务作用域在逻辑上独立于内部事务作用域。当然,在标准PROPAGATION_REQUIRED行为的情况下,所有这些作用域都将映射到同一物理事务。因此,在内部事务作用域中设置的仅回滚标记确实会影响外部事务实际提交的机会(正如您所期望的那样)。

enter image description here

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html


推荐