Как откатить функцию spring jpa repo.save () - PullRequest
1 голос
/ 17 июня 2020

Я видел несколько разных сообщений об этом топи c, но большинство из них, как правило, говорят о том, что он не работает. Я пытаюсь сохранить несколько объектов в al oop, но если один из них не работает -> откатить все сохраненные объекты.

Вот мой текущий код.

@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 ]

1 голос
/ 17 июня 2020

Вы можете использовать аннотацию @Transactional для отката транзакции в случае исключения.

1 голос
/ 17 июня 2020

Как уже упоминалось, вы можете использовать @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; 
} 
1 голос
/ 17 июня 2020

Добавьте @Transactional(rollbackFor = Exception.class) в начало метода. Spring откатит для вас все данные в этой транзакции, если в базе данных возникнет какое-либо исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...