数据库隔离级别丢失更新防止

时间:2021-06-09 04:18:05

标签: database spring-data-jpa

我使用 spring data jpa 编写了以下事务。

    @Override
    @Transactional
    public boolean removeAvailableStock(Long itemId, Long quantity) {
        ItemEntity itemEntity = itemRepository.findById(itemId).orElseThrow(NoSuchItemException::new);

        itemEntity.removeAvailableStock(quantity);

        return true;
    }

我在多线程环境中测试了该方法。

它导致了竞争条件。

所以我将事务隔离级别设置为可重复读取级别或可序列化级别。

然而,竞争条件继续发生。

唯一的解决方案是在存储库中为 findById 方法指定 LockMode。

很多文档都说事务隔离级别可以解决更新丢失的问题。

但是,事务隔离级别并没有解决并发问题。

在这种情况下,为什么隔离级别不能解决丢失的更新?

许多文档将隔离级别称为什么?

如果隔离级别不能解决并发问题,那目的是什么?

测试环境为h2 db

0 个答案:

没有答案