В чем разница между методами hibernateTemplate Flush() и clear()?
В чем разница между hibernateTemplate flush() и clear()? какой использовать когда?
У меня есть следующий код
public void saveAllReportRoomRes(List<ReportRoomRes> reportRoomResList) throws DataAccessException {
hibernateTemplate.saveOrUpdateAll(reportRoomResList);
hibernateTemplate.flush();
}
Я вызываю этот метод в цикле, который каждый раз передает список записей (общее количество записей может превышать 2 лака). Поскольку мой код находится в состоянии транзакции, иногда в последующей итерации, если hibernate обнаружил тот же объект первичного ключа (у меня есть составной первичный ключ), он генерирует исключение NonUniqueObject. но на самом деле нужно обновить запись, которая была вставлена ранее.
Если я использую HibernateTemplate.clear(), он работает.
Также это хороший способ сохранить или обновить большое количество записей? так как это мой обычный случай, когда я копирую данные из одной БД в другую БД с определенным интервалом.
1 ответ
Hibernate Session.clear ():
void org.hibernate.Session.clear ()
Удалите все объекты из кэша сеанса и отмените все ожидающие сохранения, обновления и удаления.
Где как Session.flush Сбросить все ожидающие сохранения, обновления и удаления в базу данных.
Выбор правильного зависит от типа транзакции, которую вы выберете.
Отвечая на еще один вопрос
Используйте Пакет для обновления огромных записей.