Как я могу выполнить инструкции Rollback Insert и Delete - PullRequest
1 голос
/ 13 июля 2020

Привет, у меня много операторов удаления, за которыми следует множество операторов вставки. Как я могу выполнить откат всех операторов в случае сбоя во время выполнения любого оператора. Пример: у меня есть 10 операторов удаления, за которыми следуют 10 операторов вставки. Если мой последний оператор вставки не удался, мне нужно откатить все операторы удаления и вставки. Каким будет самый простой способ добиться этого?

1 Ответ

1 голос
/ 13 июля 2020

Два способа сделать это:

  1. Поместите аннотацию Spring @Transactional поверх вашего метода, внутри которого вы выполняете вставки / удаления
  2. Создание и управление транзакцией вручную

Рекомендуется первый способ.

Примеры:

Использование только Spring:

@Service
public class MyPersistenceService {

  @Autowired
  private MyRepository mytRepository;

  @Transactional
  public void myLogic() {
     //perform all the inserts and deletes
  }

}

Использование Hibernate с Spring:

@Component
public class MyRunner implements CommandLineRunner {


 @PersistenceContext
 private EntityManager entityManager;

 @Override
 @Transactional
 public void run(String... args) throws Exception {
   Book book = new Book();
   book.setId(1L);
   book.setAuthor("author");
   book.setTitle("title");
   entityManager.merge(book); //an insert statement

   entityManager.remove(book); //a delete statement
 }
}

Второй способ - очень грубый способ сделать это, так как вы уже используете Spring. Вот фрагмент кода для этого:

Session session = null;  
Transaction tx = null;  
  
try {  
  session = sessionFactory.openSession();  
  tx = session.beginTransaction();  
  //Your insert and delete statements 
  
  tx.commit();  
  
}catch (Exception ex) {  
  ex.printStackTrace();  
  tx.rollback();  
}  
finally {
  session.close();
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...