Dieser Artikel fasst vier Möglichkeiten zusammen, um das Problem des faulen Ladens von Winterschlaf bei dem Erlernen des Winterschlafes zu lösen.
Die sogenannte faule Belastung ist verzögert das Laden, verzögerte Belastung.
Wann man faul laden? Ich kann das nur beantworten, wenn Sie faul Laden verwenden möchten, verwenden Sie Lazy Loading.
Wenn wir faule Laden verwenden müssen, ist es offensichtlich, dass wenn die Datenmenge, auf die wir zu groß sind, zu groß ist, offensichtlich nicht geeignet ist, Cache zu verwenden, da die Speicherkapazität begrenzt ist. Um die Genehmigung zu verringern und den Verbrauch von Systemressourcen zu verringern, lassen wir die Daten bei Bedarf geladen und verwenden dann faule Belastung.
Zum Beispiel gibt es ein Objekt, das Mitarbeiter und ein anderes Objekt ist, das Abteilung ist. Für den Mitarbeiter ist es im Vergleich zur Abteilung und für die Abteilung im Vergleich zum Mitarbeiter eine viel- zu eins-Beziehung im Vergleich zur Abteilung. Wenn wir das Arbeitnehmerobjekt abfragen, wird eine Ausnahme ausgelöst, wenn wir die entsprechende Abteilung über die Immobilienabteilung des Arbeitnehmerobjekts abfragen möchten. Dies liegt an der Existenz fauler Ladens. Nach Abschluss der Sitzung stellt der Hibernate eine weitere Anfrage an die Datenbank aus, und eine Ausnahme wird ausgelöst.
Im Folgenden finden Sie vier Möglichkeiten, um dieses Problem zu lösen:
1. Explizite Initialisierung (innerhalb der Abfragemethode)
Wenn Sie fragen, zu welcher Abteilung ein Angestellter gehört
Verwenden Sie Anweisung
Hibernate.initialize (Abteilung.Class);
2. Ändern Sie die Objektbeziehungsdatei und schreiben
Die beiden oben genannten Methoden können das Problem tatsächlich lösen, aber der Nachteil ist, dass der Hibernate, unabhängig davon, ob das Objekt später verwendet wird, SQL -Anweisungen in der Datenbank ausgibt, um Daten anzufordern, was zu unnötigen Leistungsabfällen führt.
3. Verwenden Sie Filter (Webprojekt)
①Der Weg zur Sitzung muss GetCurrentSession verwenden
②Special Schließsitzung Methode
public void dofilter (servletRequest request, servletResponse response, filterchain arg2) löscht ioException, servletException {// Todo automatisch generierte Methode Stub Session = NULL; Transaktion TX = NULL; try {session = hibernateUtil.getCurrentSession (); tx = session.beginTransaction (); arg2.dofilter (Anfrage, Antwort); // Anfragen werden ständig tx.commit (); } catch (Ausnahme e) {// Todo: Behandeln Sie die Ausnahme, wenn (tx! = null) {tx.rollback (); }} schließlich {// Special Closs -Methode hibernateUtil.closeSecurrentSession (); }}4. Verwenden Sie im SSH -Framework die OpenSessionView,
Das Prinzip ähnelt der Verwendung von Filter in der dritten Methode, außer dass dieser Filter durch Feder bereitgestellt wird. Bei der Verwendung müssen Sie es nur in der Datei web.xml wie folgt konfigurieren:
<!-- Use spring to solve lazy loading problems --> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <URL-Muster>/*</url-puster> </filtermapping>
Die Methoden in 3 und 4 können auch das Problem der faulen Belastung lösen, und die vierte Methode wird derzeit auch häufiger verwendet. Diese beiden Methoden haben jedoch auch Nachteile. Der Nachteil ist, dass sie die Zeit verlängern, in der die Sitzung geschlossen ist und der Lebenszyklus der Sitzung länger wird. Bevor diese Methode verwendet wurde, wurde die Sitzung nach Abfragedaten geschlossen. Jetzt ist die Sitzung am Ende einer Webanforderung geschlossen.
Zusammenfassen
In der oben genannten Möglichkeiten geht es um die vier Möglichkeiten, um das Problem des faulen Ladens von Ruhezustand zu lösen. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!