Ich werde mit der Beantwortung des zweiten Teils Ihrer Frage beginnen.
Was ist die spezifische Situation, wenn ich Fetch and Load verwenden muss?
Es gibt grundsätzlich zwei Möglichkeiten, um eine Entität in JPA, eifrig Laden und lazy Laden zu laden. Beim eifrigen Laden wird eine Entität sofort geladen, wenn ihr Elternteil geladen wird. Beim verzögerten Laden wird eine Entity nur geladen, wenn ein tatsächlicher Getter für diese Entität aufgerufen wird. Hochleistungsanwendungen neigen dazu, auf Lazy-Laden ausgerichtet zu sein, da es nicht sehr angenehm ist, den Endbenutzer darauf warten zu lassen, dass eine ganze Tabelle oder sogar eine Gruppe von Tabellen beim Start der Anwendung geladen wird. Nun zu Ihrer zweiten Frage.
Sie geben FETCH
als Ihre Strategie an, indem Sie javax.persistence.fetchgraph
in die Datei importieren, die die Entität enthält. In diesem Fall werden alle in Ihrem Entitätsdiagramm angegebenen Attribute wie FetchType.EAGER
behandelt und alle angegebenen Attribute nicht werden als FetchType.LAZY
behandelt. Wenn Sie jedoch LOAD
als Ihre Strategie angeben, indem Sie javax.persistence.loadgraph
importieren, sind alle im Entitätsdiagramm angegebenen Attribute ebenfalls FetchType.EAGER
, aber nicht angegebene Attribute verwenden ihren angegebenen Typ oder Standard, wenn die Entität nichts angegeben hat.
Welche Option sollte ich verwenden, wenn ich keine spezifische Anforderung habe?
Das besagt, es ist unwahrscheinlich, dass Sie keine spezifische Anforderung haben. Zumindest muss Ihre Webanwendung schnell ausgeführt werden. Aus diesem Grund sollten Sie das Lazy Loading bevorzugen. Die Verwendung eines FETCH
Diagramms ist eine gute Option, da es standardmäßig auf "lazy loading" mit Ausnahme von in den wenigen Spezialfällen verweist, in denen Sie ein Attribut als eifrig geladen erachten.
Hier ist eine link to a great blog, die all dies im Detail erklärt, zusammen mit Codebeispielen.
Vielen Dank für die Beantwortung der Frage! Ich könnte verstehen, wie ich diese Optionen richtig verwenden sollte. Ich dachte, dass, wenn ich fetch-Option verwende, kann ich nicht Sub-Klasse Daten abrufen, aber ich kann es immer noch tun, wenn ich Getter-Methode aufrufen, aber Daten werden aus der Datenbank abgerufen, wenn ich Getter aufrufen, nicht Elternklasse laden. –