【问题标题】:What does @Transactional do? [duplicate]@Transactional 有什么作用? [复制]
【发布时间】:2013-07-08 00:42:18
【问题描述】:

我知道这可能是重复的,具有讽刺意味的是,在我开始到处阅读之前,我以为我知道它的用途(不用说但我还是会说出来,请纠正我哪里错了):

它使程序员不必使用transaction.begin()commit()
如果您有一个调用两个 DAO 方法的方法,通常每个方法都有一个 transaction.begintransaction.commit 包含实际操作并调用它们,它将导致两个事务(如果假设以前的 DAO 方法可能会出现回滚问题也可以回滚)。

但是如果你在你的方法上使用@transactional,那么所有这些DAO调用将被包装在一个begin()-commit()循环中。当然,如果你使用@Transactional,DAO 不能使用我认为的begin()commit() 方法。

【问题讨论】:

  • 要添加的一点是,如果您在方法中添加一些代码(如提交或开始编程),它将起作用。事务性仅将您的数据库连接更改为不自动提交。
  • 和你说的一模一样。很好,你抓住了它!

标签: java spring transactions spring-jdbc


【解决方案1】:

我建议您使用此链接来解释 Spring Transaction 的所有内容。

http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/transaction.html

您还应该看到有关事务的相同属性(传播、回滚等),如果您使用这些属性,事务行为可能会改变。

【讨论】:

    【解决方案2】:

    您可以通过两种方式处理您的TransactionsProgrammaticallyDeclarative

    当您使用transaction.begintransaction.commit 和...时,您正在以编程方式处理您的Transactions。这样,您可以更好地控制 Transaction 边界,但最终会在项目中散布许多类似的代码 (Cross Cutting Concerns)。

    但是在Declarative 方式中,处理Transactions 的代码与您的业务逻辑分离,不会散布在您的项目中。这是Aspect Oriented Programming的主要概念之一。

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2013-07-24
      • 2015-05-03
      • 2017-11-08
      • 2010-10-27
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多