Fusionar dos bases de datos con estructura idéntica y asignaciones de Hibernate

Siguientes situaciones:

Tengo dos bases de datos con una estructura idéntica. Encima de cada una de estas bases de datos se ejecuta una instancia de la misma aplicación usando Hibernate para ORM. Los dos son completamente independientes.

Ahora tengo que fusionar ambas aplicaciones en una. En algunas tablas, es necesario realizar ajustes para evitar violar restricciones de clave únicas.

Dado que ambas bases de datos son idénticas en términos de estructura y se usa el mismo mapeo de Hibernate, ¿hay alguna manera de usar Hibernate para la tarea? Estoy pensando en cargar un objeto de la base de datos A, modificarlo en el código y simplemente guardarlo en una sesión desde una SessionFactory basada en la base de datos B. Me pregunto si Hibernate podría actualizar los valores de clave primaria y externa en consecuencia y lo difícil que sería manejar las dependencias de los objetos que no se copian de la base de datos A (porque ya no se necesitan).

¿Alguna recomendación?

preguntado el 10 de mayo de 11 a las 12:05

3 Respuestas

¿No es más fácil simplemente hacer un volcado de base de datos desde la base de datos A e importarlo a la base de datos B? O como uso alternativo insert into B.table (col1,col2) values (select col1,col3 from A.table) ?

contestado el 10 de mayo de 11 a las 17:05

Esto no es posible ya que existen restricciones de clave únicas. Algunas entradas también deben fusionarse en una, mientras que otras permanecerán separadas. - Lunikon

Si sus bases de datos son MySQL, utilice el motor de almacenamiento MERGE. Estos son los pasos:

-En una de sus bases de datos, actualice toda su identificación a través de Hibernate usando la cascada de todos. Toda su identificación debe incrementarse por la última identificación de su otra base de datos en cada tabla:

User1 (2000 filas, lastId: 2000) y User2 (3000 filas, lastId: 3000) -> User1 (2000 filas, lastId: 2000) y User2 (3000 filas, firstId: 3000, lastId: 6000)

-Crear otra base de datos que combine todas sus bases de datos

-Extraiga un volcado de su nueva base de datos y cargue este volcado en su base de datos final -> http://dev.mysql.com/doc/refman/5.0/en/merge-storage-engine.html

Esta es una forma posible :)

contestado el 11 de mayo de 11 a las 11:05

Esto no es posible ya que existen restricciones de clave únicas. Algunas entradas también deben fusionarse en una, mientras que otras permanecerán separadas. ;-) - Lunikon

Sé que es un hilo antiguo, pero tuve un problema similar.

Resolví incluyendo dos campos de fecha: included_date y changed_date a mis tablas, y también, incluí otro campo para guardar la fecha de la última sincronización de las bases de datos en otro lugar (tengo una tabla con información de configuración).

Cuando mi sistema se conecta al servidor, envío la fecha de la última sincronización, entonces mi rutina puede comparar qué filas se han incluido o cambiado desde mi última sincronización.

Cada nueva fila pongo la fecha en el included_date campo, así que cuando sincronizo sé qué filas se crearon después de mi última sincronización, entonces puedo hacer un INSERT. Lo mismo ocurre con los cambios de fila y el changed_date campo, luego hago un UPDATE.

Respondido 10 Jul 15, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.