@Transactional隔离如何在不锁定的情况下工作?

时间:2019-11-14 16:51:53

标签: spring jpa transactions spring-data-jpa

从这里找出: 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)

? 以及如何保证无锁定地工作?

0 个答案:

没有答案