我的服务中有两种方法
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注释但是如果我在两种方法中都使用注释它就不起作用。
我需要其他参数吗?它可能是传播?
你能告诉我如何设置这个方法吗?
谢谢!
答案 0 :(得分:1)
您需要@Transactional
updateId
REQUIRES_NEW
{。}}。
答案 1 :(得分:1)
刚才:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public updateId(long id) {
}
但是,重要的一点,从另一个类调用该方法。 即将你的循环移出这门课程。
当从外部调用公共方法时,事务注释才会启动。在同一个类中,从另一个调用一个事务方法仍然只使用第一个方法的事务。