Was ist der beste Weg, um ein Hibernate Objektgraph zu laden, bevor es in einem UI?

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

  •  09-06-2019
  •  | 
  •  

Frage

Die Situation ist folgende:

  • Sie haben einen Hibernate Zusammenhang mit einem Objektgraphen, die etwas faul hat Laden definiert.
  • Sie verwenden möchten die Hibernate Objekte in der Benutzeroberfläche als ist, ohne die Daten zu kopieren, die irgendwo.
  • Es gibt verschiedene UI Kontexte, die unterschiedliche erfordern Datenmengen.
  • Die Daten sind zu groß, um nur eifrig Last des ganzen Graph jedes Mal.

Was ist das beste Mittel, alle geeigneten Objekte im Objektgraphen in einer konfigurierbaren Weise zu laden, so dass sie ohne zugegriffen werden kann, um auf die Datenbank zurück, mehr Daten zu laden?

Jede Hilfe.

War es hilfreich?

Lösung

Lassen Sie uns sagen Sie den Client haben und an einem Punkt muss man etwas mit seinem Orden und vielleicht hat er einen Bonus für seine Bestellungen.

Dann würde ich ein Repository mit Fluent Interface definieren, die mir so etwas wie zu sagen erlaubt:

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

Und dort haben Sie den Client mit allem, was Sie brauchen. Es ist bevorzugt, dass Sie im Voraus wissen, was Sie für die aktuelle Operation benötigen. Auf diese Weise können unerwünschte Ausflüge in die Datenbank vermeiden können (neue Entwickler in Ihrem Team wird dies in der Regel tun - eine Eigenschaft nennen und nicht der Tatsache bewusst sein, dass es eigentlich ein Aufruf an die DB).

Andere Tipps

Wenn es ein Webapp ist und Sie verwenden Spring, dann könnte OpenSessionInViewFilter die Lösung Ihrer Probleme.

Ein Ansatz, den wir in unseren Projekten verwenden ist, einen Dienst zu erstellen für jede Ansicht Sie haben. Dann holt die Ansicht, die die Unter Grafik, die Sie für diese spezielle Ansicht benötigen, immer versucht, die Zahl zu reduzieren von sqls an die Datenbank senden. Deshalb verwenden wir viel gesellt sich zu den n zu erhalten. 1 zugeordneten Objekte

Wenn Sie einen 2-Tier-Desktop-App direkt an die DB verbunden sind, verwenden Sie die Objekte angebracht nur verlassen können und zusätzliche Daten zu jeder Zeit automatisch laden. Ansonsten haben Sie es auf die Sitzung wieder zu befestigen und initialisieren die Assoziation Sie mit Hibernate.initialize(Object entity, String propertyName) benötigen

(Nicht genügend Arbeitsspeicher, vielleicht nicht 100% richtig)

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