【发布时间】:2018-08-09 21:36:29
【问题描述】:
我在我的一个应用程序屏幕中使用 Spring JpaRepository 实现 CRUD。作为其中的一部分,我正在开发一个功能,用户可以将所有 Car 实体或任何内容(应该回滚)保存到数据库中。我不确定如何使用 Spring Boot、Spring Rest、Spring Jpa 实现此功能。
下面是我的源代码。
@Repository
interface CarRepository extends JpaRepository<Car, Integer> { }
@Service
class CarService {
@Autowired
CarRepository repo;
@Transactional(rollbackFor=RuntimeException.class)
public List<Car> saveAllOrNone(List<Car> cars) {
for(Car car: cars) {
repo.save(car);
}
}
}
我无法弄清楚我做错了什么。
当我使用两个不同的数据进行测试时,其中一个有无效数据,另一条记录被插入到数据库中而不是被回滚。
除此之外,我还收到了
UOWManager transaction processing failed:nested exception is com.ibm.wsspi.uow.UOWException: javax.transaction.RollbackException
之类的异常
请帮帮我。谢谢。
【问题讨论】:
-
我不明白这个问题。回滚不起作用吗?会发生什么?
-
是的,它不会回滚成功的实体。
-
只有在事务内部出现错误时才会发生回滚。当你坚持汽车时会发生错误吗?
-
是的,我故意使用无效数据(例如 First name 设置为 null)对其进行了测试。
-
尝试使用
repo.save(cars),不使用迭代器。另外,尝试在您的应用程序上添加@EnableTransactionManagement。
标签: hibernate spring-boot spring-data-jpa