2010-08-23 27 views
10

Tengo dos tablas de dos por separado bases de datos Oracle (no esquemas) que necesito para unirse a en Hibernate. Actualmente, tengo dos sesiones de Hibernate que salen a las bases de datos separadas. Antes de que cualquiera diga mirar Hibernate Shards, he pasado la mayor parte del día mirando ese subproyecto y he encontrado que: es para datos particionados horizontales (todas las tablas deben estar en todas las bases de datos AFAIK), no hay forma de decirle a Shards que busque solo en una base de datos (Hibernate Shards Docs) y ya no se está trabajando.Hacer una unión más de 2 tablas en diferentes bases de datos usando Hibernate

cosas que he pensado para tratar de resolver este problema:

  • haciendo un findAll() o alguna variante restringida de que en las dos tablas, y haciendo manualmente la unión usando algunos bucles. (Está bien para muy pequeñas mesas - prohibitivos desde pequeñas mesas en un máximo)

  • Tener las sesiones de hacer algún tipo de interacción (no tengo ni idea de si esto es factible - tendrá que buscar en la Sesión de la API de Hibernate)

  • Extracción del nombre de la base de la cadena URL de diferentes hibernación-xxxx.cfg.xml e insertarlos en los archivos separados hbm.xml como este:
    <class name="foo" table="foo_table" schema="foo_schema" catalog="foo_db">
    (no parece funcionar de mis pruebas iniciales y eso parece agujero de seguridad del tamaño de un camión)

  • utilizar el patrón de repositorio (No está seguro si mi Java-Fu es lo suficientemente fuerte)

¿Hay algo que estoy pasando por alto en uno de los casos anteriores, o puede ser otra forma que no he mencionado anteriormente ?

+1

Por convención, no debería realmente estar interactuando entre múltiples bases de datos de este tipo, aunque algunos lo hacen apoyarlo. Debe obtener la información que necesita de cada base de datos por separado y consolidarla en instancias de algún objeto comercial usted mismo. – jdc0589

+0

@ JDC0589 ¿Se está refiriendo al patrón de repositorio o a algunas de las otras formas exóticas en las que estoy intentando convencer a Hibernate para que haga lo que necesito que haga? – Oberoc

Respuesta

2

Desafortunadamente, tiene un par de problemas.

  • Hibernate no apoyar a unirse a través de múltiples instancias de base "físicos"
  • Fuera de la caja, la mayor base de datos no son compatibles con unirse a través de múltiples instancias de base "físicos"

Fundamentalmente son DBS solamente bueno/performant al unir tablas que están en la misma base de datos. Hay formas de unirse a las bases de datos, pero si el tamaño de ambas tablas es grande, esto puede ser un problema y el rendimiento puede verse afectado. Realice búsquedas en Google en la base de datos "oráculo unirse a través de la base de datos" y encontrará algunos consejos sobre cómo hacer esto, pero se trata de jugar con Oracle crear un enlace virtual de una base de datos a la otra.

Consideraría hacer la unión en la memoria, si está cómodo, el conjunto de datos encajará dentro de las limitaciones de memoria Y solo lo hará en un caso especial.

Si necesita realizar diferentes uniones entre estas dos bases de datos, entonces buscaría una solución más permanente, como el enlace de Oracle anterior.

+0

Gracias. Veré cuánto de una burocracia burocrática implicará (los sinónimos son fáciles, los gerentes convincentes, etc.) – Oberoc

Cuestiones relacionadas