Wie transferiere ich mit Hibernate Daten von einer Datenbank in eine andere?

8

Ich habe eine Anwendung A mit einem Domänenmodell, das mithilfe von Hibernate einer Datenbank zugeordnet ist. Ich habe eine andere Anwendung B, die genau die gleichen Domänenmodellklassen wie A verwendet und einige zusätzliche Klassen hinzufügt.

Mein Ziel ist es, Daten aus der Datenbank A in Anwendung B zu lesen und diese Daten in die Datenbank von B zu übertragen (um eine Kopie davon zu erstellen). Darüber hinaus haben einige der Domain-Klassen von B Assoziationen (OneToOne) zu Domain-Klassen von A (aber natürlich in der Datenbank von B).

Was ist die beste Strategie, um dies zu erreichen? Ich dachte an zwei Session-Fabriken und Session.replicate() (wie funktioniert das?). Oder sollte ich besser eine zusätzliche Mapping-Schicht zwischen diesen beiden Domänen-Modellen für die lose Kopplung einführen?

    
cretzel 02.10.2008, 13:11
quelle

4 Antworten

7

Ich habe das schon einmal gemacht, um Daten zwischen zwei verschiedenen Datenbanktypen zu übertragen (in meinem Fall DB2 und MS SQL Server). Ich erstellte zwei separate Sitzungsfactorys und gab beiden die gleiche Liste mit Mapping-Dateien. Dann lese ich einfach Datensätze von einem und speichere sie auf dem anderen.

Natürlich ging das davon aus, dass beide Datenquellen identisch waren.

    
Ian McLaird 06.10.2008, 20:21
quelle
3

Was ist der Zweck des Kopierens? Ist das ein Teil Ihres Anwendungsflusses oder Ihrer Logik? oder einfach nur Daten kopieren?

Wenn es nur darum geht, Daten zu kopieren, brauchen Sie den Ruhezustand nicht zu verwenden. Es gibt viele Werkzeuge dafür.

    
DJ. 03.10.2008 01:43
quelle
2

Wie andere bereits gesagt haben, müssen wir genau wissen, was Sie erreichen wollen. Wenn Sie eine einmalige Migration durchführen, gibt es bessere Tools als Hibernate, ETL (Extract, Transform, Load) auszuführen.

Wenn Sie wirklich darauf bestehen, dies in Hibernate zu tun (das gilt auch für Sie, Daniel), würde ich etwas tun wie:

  1. Sitzung zu Datenbank A öffnen.
  2. Lesen Sie alle Entitäten des Typs, den Sie kopieren möchten (stellen Sie sicher, dass das verzögerte Laden deaktiviert ist)
  3. Sitzung zu Datenbank B öffnen.
  4. Speichern oder aktualisieren Sie die Entitäten.

Ich würde das in einem separaten Tool anstatt in Anwendung A oder B tun.

Wenn dies jedoch Teil der Funktionalität Ihrer Anwendungen ist (z. B. Anwendung A ist die Verwaltungskonsole für die Daten, während Anwendung B die Daten verwendet), möchten Sie möglicherweise die Dinge ein wenig anders machen. Es ist schwer zu sagen, ohne zu wissen, wonach genau du suchst.

Zum Schluss noch etwas, in das man schauen kann (ich glaube nicht, dass es das ist, wonach du suchst, aber vielleicht hilft es dir, dein Problem auf eine andere Art zu betrachten) ist Hibernate Shards ( Ссылка ).

    
Jack Leow 31.10.2008 15:04
quelle
2

Versuchte andere Werkzeuge und hatte Probleme. Hier ist meine selbstgewählte Lösung. Vielleicht brauchen Sie etwas Aufräumen, aber das Fleisch ist da.

%Vor%     
Kevin Wong 28.09.2012 06:14
quelle

Tags und Links