Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Синхронизация таблицы из двух разных БД


Автор: Temdegon 11.6.2010, 16:57
есть две базы данных db1 и db2, два persistanse-контекста, два EntityManager-a. Есть Энтити. 
В первой базе данные изменяются, и тогда нужно их обновить во второй базе.
Как бы мне хотелось:
из EM1 получил лист классов
для каждого из них сделал merge в EM2.
JPA сама разобралась что там к чему - сохранила новые энтити и обновила изменившиеся.
На практике получается что когда делаю EM2.merge() для уже существующего в db2 объекта, то он вставляется еще раз, а не обновляется старая запись. 
Праймари кейи в db1 и db2 могут отличаться. equals и hashCode переопределены и праймари кей в них не учитывается.

возможно ли это вообще? Может мне нужно как-то отделить primary key от id обьекта, ввести какой-то бизнес-айди обычным полем?
Можно ввести поле lastUpdate и по нему определять изменилось ли поле, но это придется писать код для синхронизации самому, а хотелось бы что бы JPA сама этим занималась.
Подскажите как быть

Автор: Alagert 16.6.2010, 00:24
Посмотрите в сторону реплекации данных с одной БД на другую. ИМХО, это более верное решение в данной задаче.

Автор: Temdegon 16.6.2010, 02:37
Решил проблему
Цитата

На практике получается что когда делаю EM2.merge() для уже существующего в db2 объекта, то он вставляется еще раз, а не обновляется старая запись. 

http://forum.vingrad.ru/forum/topic-302979.html

Репликация тут не совсем подходит. Мне не нужно синхронизировать две базы полностью. Мне нужно реализовать возможность EnterpriceClient-приложению работать в автономно, в аварийном режиме, в случае если ЕЕ-сервер временно недоступен. Для этого придется делать локальную базу, и туда дублировать все необходимое для автономной работы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)