Grails GORM Domänenzuordnung über zwei Datenquellen

8

Ist es möglich, eine Verbindung zwischen zwei Domänenklassen (d. h. belongsTo ) zu haben, wenn die andere Domänenklasse eine andere Datenquelle verwendet? Die zwei Datenquellen sind auch verschiedene Datenbanktreiber.

Ich vermute, das ist vielleicht nicht möglich, aber ich wollte die Gemeinschaft hier erreichen, um zu sehen, ob es möglich ist. Im Moment versuche ich es zu tun und bekomme den üblichen vermuteten Hibernate-Fehler:

Invocation of init method failed; nested exception is org.hibernate.MappingException: An association from the table domain_class_A refers to an unmapped class: DomainClassB

Beispiel:

%Vor%     
Thomas Farvour 12.09.2013, 15:40
quelle

2 Antworten

7

Wie @dmahapatro in seinem Kommentar darauf hinweist, ist dies ähnlich wie beim 1-Element-Fall, und das Erstellen eigener Methoden zum Verwalten der Beziehung ist der richtige Weg. Dies hängt auch mit einem Vortrag zusammen, den ich vor einiger Zeit über Leistungsprobleme mit abgebildeten Sammlungen gemacht habe, so dass Sie zwei Fliegen mit einer Klappe schlagen können: Ссылка

Wenn Sie die Sammlung nicht benötigen, dh wenn Sie nur neue Instanzen des untergeordneten Objekts hinzufügen, funktioniert dies, weil der get -Aufruf für die DomainClassB -Instanz seine Datenquelle verwendet:

%Vor%

Das Erstellen einer neuen DomainClassA-Instanz unterscheidet sich ein wenig von der herkömmlichen Methode addTo... , aber es ist nicht so schlimm:

%Vor%

Wenn Sie Zugriff auf alle DomainClassA Instanzen für eine DomainClassB haben wollen, können Sie eine Methode dafür hinzufügen:

%Vor%

Da Sie die Abfrage jedoch selbst durchführen, müssen Sie nicht alle Instanzen laden, wenn Sie nur einige benötigen, damit Sie beliebige Abfragen ausführen können.

    
Burt Beckwith 12.09.2013, 16:58
quelle
0

Ich habe mir eine andere Lösung ausgedacht, wenn jemand etwas "automatisierteres" etwas haben möchte, vielleicht hat es Auswirkungen auf die Leistung, aber es macht es einfacher mit speziell zu arbeiten, wenn Sie, wie ich MongoDB for Grails plugin verwenden Manchmal ist es notwendig, die native Java-API zum Abrufen von Dokumenten zu verwenden.

Was ich getan habe, ist, dass ich in DomainA mit beforeValidate () den Wert von domainClassBId und onLoad () den Wert von dcB zuweisen kann. Auf diese Weise wird der Fluss natürlicher zu dem, was alle mit Hibernate gewohnt sind. Beim Speichern der DomainA wird die DomainA der DomainA zugewiesen, und der Onvalidate-Code behält nur die ID der entsprechenden Datenquelle bei. Wenn Sie Objekte beispielsweise mit der DomainA.find () -Methode laden, stellt der onLoad-Code sicher, dass das zurückgegebene Objekt eine Eigenschaft vom Typ DomainB anstelle von Long besitzt, die Sie dann zum Abfragen der Datenbank verwenden. Es ist im Grunde der gleiche Ansatz, der zuvor von Burt Beckwith vorgeschlagen wurde, aber auf eine einfachere Weise in Bezug auf das Speichern und Laden der DomainA. Wieder bin ich nicht sicher, ob es Leistungsprobleme hat, das ist etwas, das ich möchte, dass jemand mit mehr Erfahrung uns helfen könnte.

    
Juandavidarroyave 01.06.2014 17:35
quelle