@Transactional多次更新;提交每个查询

时间:2017-04-07 12:15:36

标签: java spring commit transactional

我的服务中有两种方法

public void updateAll() {
   long[] ids = new long[] {1,2,3,4,5,6,7,8,9,10};
   for (long id : ids) {
        updateId(id);
    }
}

public updateId(long id) {
  repository.update(id);
}

让我们假设在第5次更新后我有一个例外,我希望无论如何都会提交前4个操作。

我正在使用@Transactional注释但是如果我在两种方法中都使用注释它就不起作用。

我需要其他参数吗?它可能是传播?

你能告诉我如何设置这个方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要@Transactional updateId REQUIRES_NEW {。}}。

答案 1 :(得分:1)

刚才:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public updateId(long id) {
}

但是,重要的一点,从另一个类调用该方法。 即将你的循环移出这门课程。

当从外部调用公共方法时,事务注释才会启动。在同一个类中,从另一个调用一个事务方法仍然只使用第一个方法的事务。