Spring jpa repo 的意外行为事务内部的唯一密钥冲突

问题描述

我正面临 SpringBoot Jpa (2.1.18.RELEASE) 的奇怪行为。
我有一个 sql server 表,在“name”列上有一个唯一的约束。我有这个方法应该删除一条记录并插入另一个同名的记录;这两个操作在一个事务中:

@Transactional(rollbackOn = Exception.class)
public void reinsert(){
    classiRepo.deleteById(1); // this object has name = MyCode
    classiRepo.save(new Classe("MyCode"));
}

如果我执行此代码,我会出现关于违反唯一约束的错误(可能是因为直到事务结束才将删除提交到数据库):

ERROR i.s.e.m.c.i.ClassiIntegrationController.insertUpdateClassi - org.springframework.dao.DataIntegrityViolationException

奇怪的是,当我更改方法添加一个简单的 findAll() 时,异常消失了:

    @Transactional(rollbackOn = Exception.class)
    public void reinsert(){
        classiRepo.deleteById(1); // this object has name = MyCode
        classiRepo.findAll();
        classiRepo.save(new Classe("MyCode"));
    }

谁能给我解释一下这种行为?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)