13

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

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

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

4

2 回答 2

10

您可以Transactions通过两种方式处理您的:ProgrammaticallyDeclarative.

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

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

于 2018-08-01T10:01:20.207 回答
0

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

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

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

于 2014-07-29T07:56:02.363 回答