@Transactional做什么?

2022-09-04 03:34:22

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

它减轻了程序员必须使用和.
如果你有一个调用两个DAO方法的方法,通常每个方法都有一个并包含实际操作并调用它们,这将导致两个事务(如果以前的DAO方法也应该回滚,则可能存在回滚问题)。transaction.begin()commit()transaction.begintransaction.commit

但是,如果您在方法上使用,那么所有这些DAO调用都将包装在一个周期中。当然,如果您使用DAO,则不得使用我认为的和方法。@transactionalbegin()commit()@Transactionalbegin()commit()


答案 1

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

当你使用和...时,你正在以编程方式进行汉化。通过这种方式,您可以更好地控制边界,但最终将有许多类似的代码()分散在整个项目中。transaction.begintransaction.commitTransactionsTransactionCross Cutting Concerns

但从某种意义上说,处理 的代码与您的业务逻辑是分开的,不会分散在整个项目中。这是 的主要概念之一。DeclarativeTransactionsAspect Oriented Programming


答案 2

我建议你这个链接来解释春季交易的所有内容。

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

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


推荐