从这里找出:
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)
? 以及如何保证无锁定地工作?