2010-01-07 6 views
1

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

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

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

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

Вот мой атрибут модели для идентификатора

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

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

ответ

2

Четыре варианта приходит на ум:

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

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