Как откатить транзакцию, если весной запрос sql не выполнен - PullRequest
1 голос
/ 22 января 2020

У меня есть следующий метод:

   public void deleteProject(Project project) {
      employeeRepository.removeEmployeesFromProject(project);
      roleRepository.removeRolesFromProject(project);
      projectRepository.deleteProject(project);
   }

Если какой-либо из запросов sql завершится неудачно (неожиданное исключение), я хотел бы откатить и отменить ранее выполненные операции. Поэтому, если третий запрос не удался, я хотел бы отменить изменения первых двух запросов. Есть ли способ и какой лучший способ сделать это? Я читал об аннотации @Transactional, которая отправляет все запросы в одной транзакции. Я думал, что он может автоматически откатиться, если что-то не получится, но просто аннотировать метод с помощью @Transactional не получится.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Вы должны обозначить класс Spring Application @EnableTransactionManagement, чтобы @Transactional аннотации работали

0 голосов
/ 22 января 2020

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

try{
    Transaction tx = myDAO.getDefaultPersistenceManager().
    tx.begin();
    deleteProject(project);
    tx.commit();
}finally {
    if (tx != null && tx.isActive()) {
        log.trace("rolling back deleting Project");
        tx.rollback();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...