2015-09-06 4 views
0

У меня есть запрос на транзакцию Hibernate.Запрос транзакции Hibernate

В моем приложении у меня есть список данных, которые необходимо вставить в целом или нет. И по бизнес-логике мне нужно удалить все данные из этой таблицы и добавить полный список вложений. Список содержит более 100 тыс. Записей. Ниже приведен мой код для транзакции. Это неверно, поскольку он не откатывался в случае исключения одного запроса для данных Too Long. Не могли бы вы сообщить мне, что в нем не так?

public boolean deleteAndSaveAll(ArrayList<MyData> listBean) throws Exception { 

    boolean transactionCompleted = false; 

    Session session = HibernateUtils.currentSession(); 

    Transaction tx = session.beginTransaction(); 

    try { 
     String stringQuery = "DELETE FROM MyData"; 
     Query query = session.createQuery(stringQuery); 
     query.executeUpdate(); 

     for (MyData MyData : listBean) { 
     session.save(MyData); 
     } 

     tx.commit(); 
     transactionCompleted = true; 
    } catch (Exception e) { 
     MyUtils.log("DAO: MyDataDAO error while deleteAndSaveAll : "+e.getMessage()); 
     e.printStackTrace(); 
     if(tx != null){ 
     tx.rollback(); 
     } 
     throw e; 
    }finally{ 
     HibernateUtils.closeSession(); 
    } 

    return transactionCompleted; 
} 
+0

Вы должны сделать контрольно-пропускные пункты и откат до последней контрольной точки –

+0

Но почти все примеры примеров спящего режима привели к такому примеру. Не знаю, почему это не сработало. Еще спасибо за ваше предложение. Я буду искать его для этого же. – Ketan

ответ

0

Я не нашел подходящего решения для этой проблемы.

Поэтому мне нужно сделать работу с использованием хранимой процедуры.

Логика за увиденным в Хранимой процедуре, как показано ниже.

  • Pass полная информация, которую я хочу, чтобы вставить в хранимую процедуру
  • Хранимая процедура делает все задний конец процесса, как проверка и упорядочивание данных.
  • Вставьте все эти данные в другую временную таблицу, где таблица та же, что и наша таблица.
  • обрезать существующую таблицу и скопировать все данные из временной таблицы в фактическую таблицу.

Выше процедура намного быстрее, чем ритуальный процесс вставки.

Смежные вопросы