Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Transactional做什么?_Java_Spring_Transactions_Spring Jdbc - Fatal编程技术网

Java @Transactional做什么?

Java @Transactional做什么?,java,spring,transactions,spring-jdbc,Java,Spring,Transactions,Spring Jdbc,我知道这可能是重复的,具有讽刺意味的是,在我开始到处阅读它之前,我认为我知道它的用途(不用说,但我还是会说,请纠正我的错误): 它使程序员不必使用transaction.begin()和commit() 如果您有一个方法调用两个DAO方法,这两个DAO方法通常都有一个事务。begin和事务。commit包含实际操作并调用它们,这将导致两个事务(如果之前的DAO方法也应该回滚,则可能会出现回滚问题) 但是如果在方法上使用@transactional,那么所有这些DAO调用都将被包装在一个begin

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

它使程序员不必使用
transaction.begin()
commit()

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


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

我建议您使用这个链接来解释Spring事务的所有内容


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

您可以通过两种方式处理
事务
:以编程方式
声明式

当您使用
transaction.begin
transaction.commit
和…,您正在以编程方式处理
事务。通过这种方式,您可以更好地控制
事务
边界,但最终会有大量类似的代码(
交叉关注点
)散布在您的项目中


但是,以
声明性的方式,处理
事务的代码将与业务逻辑分离,不会分散在整个项目中。这是
面向方面编程的主要概念之一

需要补充的一点是,如果您在方法中添加一些代码,如commit或begin programmaticly,它将起作用。事务只会将您的数据库连接更改为非自动提交。这与您所说的一模一样。很好,你接得很好!