我已经看到了几个不同的帖子关于这个主题,但大多数都倾向于它是不起作用的。 我试图做的是在一个循环中保存几个对象,但是如果其中一个失败->; 回滚所有保存的对象。
这是我当前的代码。
@Override
public Fleet saveFleet(String fleetId, List<String> serialNoList) {
fleet = new Fleet();
Fleet tempFleet = new Fleet();
fleet.setKey(new FleetKey());
//Change this to string utils uppercase
fleet.getKey().setFleetId(StringUtils.upperCase(fleetId));
fleet.getKey().setUserId(StringUtils.upperCase(userService.getCurrentUser().getUserId()));
fleet.getKey().setDealerCd("USER");
for (int i = 0; i < serialNoList.size(); i++) {
//Try catch block?
tempFleet = fleetRepo.save(fleet);
}
//commit if all the data goes correctly, rollback if there is an exception.
return tempFleet;
}
将@transactional(rollbackFor=exception.class)
添加到方法的顶部。 如果数据库引发异常,spring将回滚此事务中的所有数据。
您可以使用@Transactional注释在异常情况下回滚transaction。
正如其他人提到的,您可以使用@transactional:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/transactional.html
它实际上做的是:
try {
transaction.begin();
saveFleet(fleetId, serialNoList);
transaction.commit();
} catch(Exception ex) {
transaction.rollback();
throw ex;
}