当前位置: 首页 > 知识库问答 >
问题:

为什么Spring在这里提交事务?

商飞龙
2023-03-14

我有以下方法调用层次结构

public class UpdateProcess   { 

       public void startingMethod(List<Object> objects){
          for (Object obj : objects) {
              method1(obj);
           }
       }

        @Transactional
        public void method1(Object obj) {
            method2(obj);
        }


        public void method2(Object obj) {
           EmployeeService.updateObject(obj)
        }
    }   

public class EmployeeService

    @Transactional
    public void updateObject(Object obj) {

        return customerDao.update(obj);
    }


  }

在上面的场景中,我的期望是Spring应该在线程从Method od1出来时提交事务,或者如果在层次结构中的任何位置发生异常,则回滚。

但是Spring在方法2中执行更新后立即提交事务。我不明白为什么?

更新:-即使我将事务更改为事务(传播=传播。需要\u NEW),它仍会提交事务。所以没有影响

共有1个答案

慕乐语
2023-03-14

使用基于代理的Spring AOP时,对同一对象调用另一个方法不会导致应用方面。@Transactional for UpdateProcess的实现将在位于UpdateProcess和其他bean之间的代理中创建。因此,如果从bean的“内部”而不是“外部”调用该方法,则调用不会通过代理,也不会应用方面。

 类似资料:
  • 问题内容: 我应该开发一个简单的SFTP。 一切都进行得很好,直到我(在本例中)没有编写全部为止。可以请我解释一下,为什么系统挂在我身上吗? 服务器端: 客户端: 问题答案: 您的循环一直运行到流结束,但是对等方永远不会关闭套接字。该协议似乎要求打开套接字以供其他命令使用,因此您必须调整它的这一部分以包括一个长度字前缀,以便您知道要复制多少字节。 问题不是关于不写所有字节,而是关于阻塞in 。

  • 我在我的项目中做过类似的事情。我手动回滚事务,为此我插入了try-catch块并手动回滚catch块中的事务。现在我从method1调用method2,并将对象保存到method2()中的数据库中,但它不会将对象保存到数据库中。 我只是想知道什么是可能的解决方案,保存对象在方法2()在方法1()的faliure。 提前感谢。

  • 测试代码为: 测试代码为: 你知道怎么了吗?

  • 我遇到JSON解析错误。我的代码如下: 我从我的检查中得到以下错误: 由于:com,无法分析JSON。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN\u对象,但在第1行第2列为BEGIN\u数组 对于我试图读取的JSON,如果成功,我的应该返回5。 我做错了什么?

  • 这是我的线程: 它得到一个上限和下限以及一个在所有线程上共享的结果。 这是我的测试类:

  • 问题内容: 我刚读 ISO / IEC 9899:201x委员会草案-2011年4月12日 在其中我发现5.1.2.2.3程序终止 这表示如果您未在中指定任何return语句,并且如果程序成功运行,则main的右大括号}将返回0。 但是在下面的代码中,我没有指定任何return语句,但是它没有返回0 编译 问题答案: 该规则是在C标准的1999版本中添加的。在C90中,返回的状态未定义。 您可以通