我正面临 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"));
}
谁能给我解释一下这种行为?