/ / Frage zu Hibernate POJO-Klassendesign - Java, Hibernate, Orm

Frage zum Hibernate POJO-Klassenentwurf - Java, Hibernate, Orm

Ich lerne Winterschlaf und habe eine Frage zum Design meiner POJO-Klasse Ich habe eine Klasse Ziel mit wenigen Eigenschaften wie

private Set<AirTransport> airTransport;
private Set<RoadTransport> roadTransport;
private Set<TrainTransport> trainTransport;

da dies ein Hinweis auf eine andere Entität istklassen, meine frage ist, wann ich meine zielklasse abrufen werde, ich möchte nicht, dass diese referenz in den speicher geladen wird, damit sie später abgerufen werden können, wenn der benutzer auf einen der links wie (airtransport) klickt am besten erreichen. Ich bin ne zu Hibernate also bitte korrigiere mich wo immer ich mich irre.

Thnaks im Voraus

Antworten:

2 für die Antwort № 1

Dies nennt man "Lazy Loading". Standardmäßig werden alle Sammlungen im Ruhezustand (und in JPA) verzögert geladen, dh, sie werden erst geladen, wenn auf sie zugegriffen wird. Standardmäßig ruft Ihr Objekt also nicht alle Daten ab.

Aber faules Laden hat seine Komplikationen. Wenn Sie versuchen, nach dem Schließen der Ruhezustandssitzung auf eine Sammlung zuzugreifen, wird eine Ausnahme ausgelöst. Und wie es scheint, werden Sie die Sammlungen benötigen, nachdem der Benutzer eine Aktion ausgeführt hat (klickt auf eine Schaltfläche).

Für diesen Fall haben Sie zwei Möglichkeiten:

  • Wenn der Benutzer auf die Schaltfläche klickt, wird die Entität erneut geladen und die gewünschte Sammlung initialisiert. Entweder von Hibernate.initialize(..) oder durch Iteration in der Ansicht. Beachten Sie, dass Sitzungen normalerweise geschlossen sind, bevor die Ansicht gerendert wird OpenSessionInViewFilter

  • Verwenden Sie Sammlungen überhaupt nicht. Sie haben sowieso ein eingeschränktes Verhalten HQL oder die Kriterien-API zum Abrufen der Ergebnisse. Auf diese Weise können Sie pagen und denken nicht an faule Probleme


0 für die Antwort № 2

Dies wird in der ORM-Welt Lazy Fetch genannt. Lesen Sie das Tutorial Hier. Vielleicht möchten Sie auch verwandte Muster lesen: Sitzung in Ansicht öffnen