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

@Transactional multiple update; commit every single query

我的服务中有 2 个方法

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 注释,但如果我将注释放在这两种方法中,它就不起作用。

我还需要其他参数吗??可能是传销??

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

谢谢!!

您需要 updateId 上的单独 @TransactionalREQUIRES_NEW

刚刚有:

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

但是,重要的是,从另一个 class 调用该方法。 即把你的循环移出这个class。

事务注释仅在从外部调用 public 方法时才会启动。在同一个 class 中,从另一个调用一个事务方法仍将仅使用第一个方法的事务。