Объединение двух баз данных с одинаковой структурой и отображениями Hibernate - PullRequest
1 голос
/ 10 мая 2011

следующие ситуации:

Я получил две базы данных с одинаковой структурой. Поверх каждой из этих баз данных запускается экземпляр того же приложения, использующего Hibernate для ORM. Два полностью независимы.

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

Поскольку обе базы данных идентичны с точки зрения структуры и используется одно и то же отображение Hibernate, есть ли способ использовать Hibernate для этой задачи? Я думаю о загрузке объекта из базы данных A, изменении его в коде и просто сохранении его в сеанс из SessionFactory на основе базы данных B. Мне интересно, сможет ли Hibernate соответствующим образом обновить значения первичного и внешнего ключей и насколько сложно будет обрабатывать зависимости от объектов, которые не копируются из базы данных A (потому что они больше не нужны).

Есть рекомендации?

Ответы [ 3 ]

0 голосов
/ 10 мая 2011

Если ваши базы данных MySQL, вы используете механизм хранения MERGE. Вот шаги:

-В одной из ваших баз данных обновите все свои идентификаторы через Hibernate, используя каскад всех. Все ваши идентификаторы должны быть увеличены на последний идентификатор вашей другой базы данных в каждой таблице:

Пользователь1 (2000 строк, последний идентификатор: 2000) и Пользователь2 (3000 строк, последний идентификатор: 3000) -> Пользователь1 (2000 строк, последний идентификатор: 2000) и Пользователь2 (3000 строк, первый идентификатор: 3000, последний идентификатор: 6000)

-Создание другой базы данных, которая объединит все ваши базы данных

- Извлечь дамп из вашей новой базы данных и загрузить этот дамп в вашу окончательную базу данных -> http://dev.mysql.com/doc/refman/5.0/en/merge-storage-engine.html

Это один из возможных способов:)

0 голосов
/ 10 июля 2015

Я знаю, что это старая ветка, но у меня была похожая проблема.

Я решил включить в таблицы два поля даты: included_date и changed_date, а также добавил другое поле, чтобы сохранить дату последней синхронизации баз данных где-то еще (у меня есть таблица с информацией о конфигурации).

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

В каждой новой строке я устанавливаю дату в поле included_date, поэтому, когда я синхронизирую, я знаю, какие строки были созданы после моей последней синхронизации, тогда я могу сделать INSERT. То же самое происходит с изменениями строки и поля changed_date, тогда я делаю UPDATE.

0 голосов
/ 10 мая 2011

не проще ли просто сделать дамп базы данных из базы данных A и импортировать его в базу данных B?Или в качестве альтернативы использовать insert into B.table (col1,col2) values (select col1,col3 from A.table)?

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