Проблема с резервным копированием БД в Spring / Hibernate GenerationType.AUTO - PullRequest
1 голос
/ 07 января 2010

Я работаю с Spring / Hibernate Dao для сохранения моего объекта в базе данных. Теперь я должен был сделать резервную копию всей моей БД внутри моего приложения. Теперь, когда я пытаюсь прочитать мою резервную копию обратно, мое приложение зависло. Теперь я нашел проблему для этого сбоя. Это Hibernate, он автоматически создает новый идентификатор для моего объекта, когда я хочу сохранить.

Например, я сохранил свой объект a с идентификатором 4 в файле резервной копии.

Теперь я прочитал файл резервной копии. Очистите мою БД от старых вещей. Сохраните этот объект обратно в БД. и теперь мой идентификатор объекта, например, 5. Но это должно быть 4. Как я могу запретить hybernate автоматически генерировать значение моего id?

Должен ли я написать дополнительный JDBCDao для импорта?

Вот мой атрибут Model для id

@ID  
 @Column(name="ID")   
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Long id;

Спасибо за помощь и извините за мой плохой английский.

1 Ответ

2 голосов
/ 07 января 2010

Мне на ум приходят четыре варианта:

  • создайте резервную копию с помощью утилиты базы данных (например, в случае с mysql - с помощью mysqldump) и восстановите ее снова с помощью утилиты базы данных, без спящего режима
  • , поскольку вышеприведенное не представляется возможным сейчас , вы можете генерировать SQL-запросы на основе вашей резервной копии (покажите нам формат вашей резервной копии) и выполнять их как пакет для базы данных. (опять без спящего режима)
  • Если вы не хотите использовать опцию SQL и хотите использовать ее в режиме гибернации, выполните итерации ваших объектов и сохраните их один за другим. сразу после сохранения обновите объект с правильным идентификатором (либо с помощью .persist(), либо с помощью HQL).
  • Вы можете временно удалить аннотацию GeneratedValue во время импорта.

Все это говорит, я думаю (опять же, в зависимости от вашего формата), что не должно иметь значения столько того, что идентификаторы, если ссылочная целостность не повреждена.

...