首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Transactional(propagation=Propagation.REQUIRED)

@Transactional(propagation=Propagation.REQUIRED)
EN

Stack Overflow用户
提问于 2012-05-24 22:57:07
回答 4查看 170.9K关注 0票数 113

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

代码语言:javascript
复制
@Transactional(propagation=Propagation.REQUIRED)

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-24 23:01:15

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

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

票数 68
EN

Stack Overflow用户

发布于 2012-05-24 23:18:11

如果除了Spring Docs中提供的用法之外,还需要外行的用法说明

考虑下面的代码。

代码语言:javascript
复制
class Service {
    @Transactional(propagation=Propagation.REQUIRED)
    public void doSomething() {
        // access a database using a DAO
    }
}

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

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

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

票数 172
EN

Stack Overflow用户

发布于 2012-05-24 23:03:39

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

实际上propagation=Propagation.REQUIRED是默认的传播级别,您不需要显式地提到它。

欲了解更多信息,请访问:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10740021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档