@ Transactional (传播 = 传播必需)

如果有人能够解释这个注释是做什么的,以及我们什么时候使用它:

@Transactional(propagation=Propagation.REQUIRED)

谢谢

180888 次浏览

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

enter image description here

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

在 Spring 应用程序中,如果使用 <tx:annotation-driven/>启用基于注释的事务支持并使用 @ Transactional (传播 = 传播必需)注释任何类/方法,那么 Spring 框架将启动一个事务并执行该方法并提交该事务。如果发生任何 RuntimeException,则事务将回滚。

Actually propagation=Propagation.REQUIRED is default propagation level, you don't need to explicitly mentioned it.

更多信息: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations

要了解事务管理所采用的各种事务设置和行为,如 REQUIREDISOLATION等,您必须了解事务管理本身的基本知识。

阅读 交易管理了解更多解释。

如果您需要对 Spring Docs中提供的用法之外的用法进行外行解释

考虑一下这个代码。

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

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

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

事务管理是一个相当复杂的主题,因此希望这个简化的答案有所帮助