В чем разница между методами 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 Сбросить все ожидающие сохранения, обновления и удаления в базу данных.

http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html

Выбор правильного зависит от типа транзакции, которую вы выберете.

Отвечая на еще один вопрос

Используйте Пакет для обновления огромных записей.

Другие вопросы по тегам