0

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

@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"));
    }

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

4

0 回答 0