2010-08-23 16 views
10

Ho due tabelle in due separati Oracle database (non schemi) che ho bisogno di partecipare Hibernate. Attualmente, ho due sessioni di Hibernate che escono nei database separati. Prima che qualcuno dica un'occhiata a Hibernate Shards, ho passato una buona parte della giornata a guardare quel sottoprogetto e ho scoperto che: è per dati partizionati orizzontali (tutte le tabelle devono essere in tutti i database AFAIK), non c'è modo per uno di dire a Shards di guardare solo in un database (Hibernate Shards Docs), e non viene più lavorato.Facendo un join oltre 2 tavoli in diversi database usando Hibernate

cose che ho pensato per cercare di risolvere questo problema:

  • facendo un findAll() o qualche variante ristretta di quella su entrambi i tavoli, e fare manualmente il join utilizzando alcuni loop. (Ok per molto piccoli tavoli - proibitivi da tavolini in su)

  • Avere le sessioni di fare qualche tipo di interazione (non ho idea se questo è ancora fattibile - dovrà guardare il Hibernate Session API)

  • Rimozione del nome del database dalla stringa URL di diversi hibernate-xxxx.cfg.xml e inserirli nei file hbm.xml separati come questo:
    <class name="foo" table="foo_table" schema="foo_schema" catalog="foo_db">
    (non sembra lavorare da miei test iniziali e che sembra buco di sicurezza di dimensioni camion)

  • Utilizzare il Pattern Repository (Incerto se il mio Java-Fu è abbastanza forte)

C'è qualcosa che sto trascurando in uno dei casi di cui sopra o può essere un altro modo che non ho elencato sopra ?

+1

Per convenzione, si dovrebbe in realtà non interagiranno tra più database in questo modo, anche se alcuni lo fanno sostenerlo. È necessario ottenere separatamente le informazioni necessarie da ciascun database e consolidare le istanze di alcuni oggetti business autonomamente. – jdc0589

+0

@ JDC0589 Ti stai riferendo al pattern di deposito o ad altri degli esotici modi in cui sto cercando di convincere Hibernate a fare ciò che mi serve per farlo? – Oberoc

risposta

2

Purtroppo ci sono un paio di problemi.

  • Hibernate non sostenere l'adesione tra più istanze di database "fisici"
  • Fuori dalla scatola, la maggior parte di database non supportano l'adesione tra più istanze di database "fisici"

Fondamentalmente DB sono solo buono/performante alle tabelle di join che si trovano nello stesso database. Esistono diversi modi per unire i database, ma se le dimensioni di entrambe le tabelle sono grandi questo può essere un problema e le prestazioni potrebbero risentirne. Fai qualche ricerca su "oracle join across database" e troverai alcuni suggerimenti su come fare questo, ma coinvolgeremo i problemi con Oracle creando un collegamento virtuale da un DB all'altro.

Vorrei prendere in considerazione l'eventuale join in memoria, se si è sicuri che il set di dati si adatta ai limiti di memoria E lo si fa solo in un caso speciale.

Se è necessario effettuare diversi join tra questi due database, sceglierei una soluzione più permanente, come il collegamento Oracle sopra riportato.

+0

Grazie. Vedrò quanta burocrazia comporterà la questione (i sinonimi sono facili - convincenti manager - meno così) – Oberoc

Problemi correlati