Hibernate Entities aus mehreren Datenbanken

9

Unser Datenmodell ist in Schemata auf zwei Datenbanken aufgeteilt. Die Schemas werden isoliert verwendet, mit Ausnahme einiger einfacher Schlüsselbeziehungen, die eine Brücke zwischen den beiden bilden. Es gibt keine Schreibtransaktionen, die beide Datenbanken umfassen.

Ähnlich wie bei dieser Frage Wenn Sie über 2 Tabellen in verschiedenen Datenbanken mit Hibernate verbinden , möchten wir Hibernate verwenden, um die Verknüpfung zu übernehmen Entitäten. Wir können die Datenbanklösung (föderierte Sichten auf DB2) nicht verwenden.

Wir haben Hibernate mit zwei separaten Datenbankkonfigurationen (Arzt und Patient) eingerichtet, was perfekt funktioniert, wenn Sie DAOs verwenden, um explizit auf eine bestimmte Sitzung zuzugreifen.

Wir möchten Hibernate verwenden, um die Entität automatisch abzurufen, wenn wir DoctorBO.getExam().getPatient() aufrufen, wobei die Untersuchung eine ID enthält, die auf die Patiententabelle in der anderen Datenbank verweist.

Eine Möglichkeit, dies zu tun, ist die Verwendung eines benutzerdefinierten Benutzertyps:

%Vor%

Was würde dann verwendet werden:

%Vor%

Der UserType funktioniert - die Daten werden korrekt geladen, wobei nur die ID des Feldes in der Datenbank beibehalten wird. Ich habe sehr einfache Beispiele von doctor.getExam().getPatient() und doctor.getExam().setPatient() getestet und beide scheinen großartig zu funktionieren, aber ich denke, das ist ein schrecklicher Hack und ich habe kein ausreichendes Wissen über Hibernate, um zu wissen, ob dies sicher ist.

>

Gibt es einen besseren Weg, um das zu erreichen, was wir wollen? Ist der Weg, den ich hier beschrieben habe, angemessen, oder wird es in der Zukunft Schwierigkeiten bereiten?

    
J Barclay 24.01.2012, 01:03
quelle

1 Antwort

5

Ich denke nicht, dass es eine gute Idee ist. Sie versuchen, "als ob" alles in einer einzigen Datenbank gespeichert wäre, was nicht der Fall ist. Und Sie machen "als ob" eine echte toOne Assoziation zwischen einer Prüfung und einem Patienten, obwohl es keine echte Assoziation ist.

Obwohl Sie sich dieser Tatsache bewusst sind, werden andere oder zukünftige Entwickler nicht unbedingt sein und sich fragen, warum es nicht möglich ist, eine Abfrage wie

zu erstellen %Vor%

oder

%Vor%

Kurz gesagt, Ihre Pseudoassoziation erfüllt nur einen sehr kleinen Teil des Vertrags, den eine reguläre Assoziation anbietet, und dieser Wille, IMO, verursacht mehr Verwirrung als Komfort.

Nichts hält Sie davon ab, eine Hilfsmethode wie

zu verwenden %Vor%

das macht dasselbe, stellt aber klar, dass es zwischen beiden Entitäten keine wirkliche Assoziation gibt.

    
JB Nizet 08.02.2012, 23:08
quelle

Tags und Links