@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
上的单独 @Transactional
和 REQUIRES_NEW
。
刚刚有:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public updateId(long id) {
}
但是,重要的是,从另一个 class 调用该方法。
即把你的循环移出这个class。
事务注释仅在从外部调用 public 方法时才会启动。在同一个 class 中,从另一个调用一个事务方法仍将仅使用第一个方法的事务。
我的服务中有 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
上的单独 @Transactional
和 REQUIRES_NEW
。
刚刚有:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public updateId(long id) {
}
但是,重要的是,从另一个 class 调用该方法。 即把你的循环移出这个class。
事务注释仅在从外部调用 public 方法时才会启动。在同一个 class 中,从另一个调用一个事务方法仍将仅使用第一个方法的事务。