我正在使用 CrudRepository.save(Iterable<S>)
保存多个对象.
这个操作行为是原子的吗?
如果我保存了 10 个实体,而第 6 个实体失败了,会发生什么情况?
最佳答案
在所看到的背后,这是 SimpleJpaRepository
使用 Iterable 保存方法时发生的情况
@Transactional
public <S extends T> List<S> More save(Iterable<S> entities) {
List<S> result = new ArrayList<S>();
if (entities == null) {
return result;
}
for (S entity : entities) {
result.add(save(entity));
}
return result;
}
值得注意的是,在最新版本中,使用Iterable
保存已更改为saveAll
Refer changes了解更多详情
What will happen if I save 10 entities and it fails for 6th one?
默认情况下CrudRespository
将具有@Transactional
,因此在发生异常的情况下不会保存任何内容。
如果手动处理,这将起作用
如果你正在做这样的事情,事情将会回滚。
@Transactional(rollbackFor=RuntimeException.class)
public List<Car> saveAllOrNone(List<Car> cars) {
for(Car car: cars) {
repo.save(car);
}
}
关于java - CrudRepository.save(Iterable<S>) 是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56324363/