Проблема удаления Hibernate - PullRequest
0 голосов
/ 07 мая 2010

Я пытаюсь написать приложение Java, которое импортирует файл данных. Процесс выглядит следующим образом

  1. Создать транзакцию
  2. Удалить все строки из таблицы данных
  3. Загрузить файл данных в datatable
  4. Подтвердить ИЛИ откат, если возникли какие-либо ошибки.

Данные, загруженные на шаге 3, в основном совпадают с данными, удаленными на шаге 3.

Удаление выполняется с использованием следующего

DetachedCriteria criteria = DetachedCriteria.forClass(myObject.class);
List<myObject> myObjects = hibernateTemplate.findByCriteria(criteria);
hibernateTemplate.deleteAll(myObjects);

Когда я загружаю файл данных, я получаю следующее исключение

nested exception is org.hibernate.NonUniqueObjectException: 
a different object with the same identifier value was already associated with the session:

Весь процесс должен проходить в транзакции. И я действительно не хочу сравнивать файл импорта / таблицу данных, а затем выполнить вставку / обновление / удаление, чтобы синхронизировать их.

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 07 мая 2010

Первая идея: вы пытались flush() Session после шага # 2?

Вторая идея: используйте StatelessSession интерфейс . Возможно, вам придется увеличить HibernateTemplate для этого, поскольку SPR-6202 и SPR-2495 не разрешены.

0 голосов
/ 07 мая 2010

Кратчайший ответ, используйте session.merge ()

Короткий ответ, используйте обычный jdbc hibernate - неправильный инструмент для этой работы.

Более длинный ответ, посмотрите, чтоваши инструменты базы данных поддерживают в этом отношении.
Решение может быть следующим:

  1. переименовать таблицу old_table
  2. создать новую пустую таблицу
  3. импортировать данные вновая таблица
  4. drop old_table

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...