Wie Hibernate Entitäten, die von einem entfernten Methodenaufruf geholt zu initialisieren?

StackOverflow https://stackoverflow.com/questions/119732

  •  02-07-2019
  •  | 
  •  

Frage

Wenn Sie einen Remote-Service-Aufruf (z über RMI) eine Liste von Objekten aus einer Datenbank laden Hibernate, wie schaffen Sie es, alle Kundenbedürfnisse die Felder und Referenzen zu initialisieren?

Beispiel: Der Kunde ruft eine Remote-Methode alle Kunden zu laden. Mit jedem Kunden möge der Kunde die Referenz auf die Liste des Kunden gekaufter Artikel initialisiert wird.

Ich kann die folgenden Lösungen vor:

  1. Remote-Methode für jede spezielle Abfrage schreiben, die die erforderlichen Felder initialisiert (Z Hibernate.initialize ()) und gibt die Domain-Objekte an den Client.

  2. Wie 1., aber erstellen DTOs

  3. die Abfrage Aufgeteilt in mehrere Abfragen, zum Beispiel eine für die Kunden, Artikel eine zweite für den Kunden, und lassen Sie den Client die Ergebnisse verwalten

  4. Die Remote-Methode nimmt einen DetachedCriteria, die durch den Server vom Client und ausgeführt erstellt wird,

  5. Entwickeln Sie ein benutzerdefiniertes "Preload-Muster", das heißt eine Möglichkeit für den Client explizit angeben, welche Eigenschaften vorab zu laden.

War es hilfreich?

Lösung

Ich habe 1 in der Vergangenheit verwendet und es hat gut funktioniert.

Andere Tipps

Ich denke, Nummer 5 ist, warum es ein „holen“ -Klausel in HQL ist. Könnten Sie das oder ist das Problem komplexer verwenden?

Ich habe bei einem Kunden gegeben, die auf # 5 seine Projekte standardisierten und es funktioniert wirklich gut. Das letzte Argument eines Service-Aufruf war eine durch Kommata getrennte Liste aller Eigenschaften geladen wird, zum Beispiel:

CustomerService.getCustomerById(id, "parent, address, address.city")

Ich glaube, dass sie die Klausel für diese holen verwendet. Ich implementiert die gleiche Idee einmal für JPA PropertyUtils mit dem verzögertes Laden auszulösen.

Der Remote-Service ... ist es ein anderer Teil der gleichen Anwendung? wenn ja, dann ist es kein Problem Klassen teilen und Instanzen hin und her (das gleiche gilt für RMI, mit Stubs) zu senden.

Dann gibt es noch die Möglichkeit, einen Web-Service oder etwas ähnliches zugreifen, wo die beiden Anwendungen keine Klassen Kommunikation zu teilen und das macht die Sache noch komplizierter. Ich bin über dieses Problem in naher Zukunft zu stellen, und ich werde sehr daran interessiert, die Antwort zu kennen.

Wie auch immer, meine Stimme ist für DTOs. Ich glaube, sie bieten die beste und einfachste Lösung, gegebenenfalls und helfen, den Code einfach und wartbar zu halten.

Yuval = 8 -)

Wenn Ihr Remote-Service gibt es nur Ihren Client mit Daten zu versorgen, dann verzögertes Laden auf allen Hibernate Entitäten Abschalten helfen könnte.

Persönlich aber ich denke, DTOs der richtige Weg zu gehen. Durch die Remote-Schnittstelle in Bezug auf DTOs exprimierenden sind Sie sicher, dass Sie alles, was Sie bekommen müssen, und nichts, was man nicht erwartet hatte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top