提问者:小点点

如何回滚spring jpa repo.save()函数


我已经看到了几个不同的帖子关于这个主题,但大多数都倾向于它是不起作用的。 我试图做的是在一个循环中保存几个对象,但是如果其中一个失败->; 回滚所有保存的对象。

这是我当前的代码。

@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;
}

共3个答案

匿名用户

@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; 
}