从这里了解到:https://stackoverflow.com/a/58831350/10894456 @Transactional
不会锁定在内部使用的实体上触发的行 @Transactional
方法。
我们需要使用乐观的( @Version
实体中的注解)或悲观( @Lock
在存储方法中)从 @Transactional
方法。
问题是:隔离是如何工作的 @Transactional
方法在面对任何锁的缺失?例如
@Service
public class AService {
@Autowired
private Repository1 repository1;
@Autowired
private Repository2 repository2;
@Autowired
private Repository3 repository3;
@Transactional(isolation = Isolation.SERIALIZABLE)
public Result getResult(Long id) {
Entity1 e1 = repository1.findById(id);
Entity2 e2 = repository2.findById(id);
Entity3 e3 = repository3.findById(id);
e1.setField(doSomeLogic(...)));
e2.setField(doSomeLogic(...)));
e3.setField(doSomeLogic(...)));
repository1.save(e1);
repository2.save(e2);
repository3.save(e3);
return Result.combine(e1,e2,e3);
}
}
什么是使用保证
@Transactional(isolation = Isolation.SERIALIZABLE)
? 在没有任何锁定的情况下,这种保证是如何工作的?
暂无答案!
目前还没有任何答案,快来回答吧!