我的实体同时具有自动生成的主键(id)和业务关键字(namespace)。我需要通过替换旧记录来更新该记录。因此,我通过业务关键字进行搜索,删除它并保存一个新实体。如果每个操作都在自己的事务中,则可以正常工作。但是,一旦我将它们全部放入同一个事务中,在执行save()时,delete()尚未执行,因此我会遇到约束违规错误。
transactionTemplate.execute(status -> {
MyEntity oldEntity = repository.findByNamespace(namespace);
if (oldEntity != null) {
repository.delete(oldEntity);
}
repository.save(newEntity);
return null;
});
我实际上通过添加成功绕过了它
repository.flush();
但我真的不明白为什么我需要这个flush()。