Hibernate Open Session in View: Eine kontroverse Praxis
Einführung
Open Session in View (OSIV) ist eine Hibernate-Funktion, die es ermöglicht, dass die Hibernate-Sitzung während des Anfrage-Antwort-Zyklus geöffnet bleibt. Diese Vorgehensweise war in der Java-Community ein Diskussionsthema, wobei einige ihre Zweckmäßigkeit befürworteten, während andere ihre Nachteile in Frage stellten.
Probleme mit OSIV
OSIV stellt mehrere Herausforderungen dar :
-
Inkonsistente Transaktionsverarbeitung: OSIV hält die Sitzung offen auf unbestimmte Zeit, unter Umgehung des typischen Transaktionslebenszyklus. Dies kann zu unbeabsichtigten Folgen führen, wie z. B. Datenkonsistenzproblemen.
-
Verschlechterung der Datenbankleistung: Das Offenhalten einer Sitzung übt Druck auf die Datenbank aus, da alle zusätzlichen Anweisungen, die während der Antwortverarbeitung ausgeführt werden (z. B. , Lazy Association Initialization) werden im Auto-Commit-Modus ausgegeben.
-
Unscharfe Ebenentrennung: OSIV verwischt die Trennung von Belangen zwischen der Geschäftsschicht und der UI-Rendering-Phase, was es schwierig macht, die Anwendung zu testen und zu warten.
-
Erhöhte Verbindungsleasezeit: Die Sitzung kann offen gehalten werden über einen längeren Zeitraum, wodurch die Ressourcen des Datenbankverbindungspools begrenzt werden.
Alternative Strategien
Um diese Probleme zu vermeiden, können Entwickler alternative Strategien anwenden:
-
Lazy Associations explizit initialisieren:Lazy Associations in der Serviceschicht mit Join initialisieren Fetch oder FetchMode.SUBSELECT.
-
Separates DAO erstellen Abfragen: Schreiben Sie spezifische DAO-Abfragen für die UI-Ebene, die darauf zugeschnitten sind, nur die notwendigen Assoziationen abzurufen.
-
Ansichtsprojektionen verwenden: Erstellen Sie Projektionen, die nur die wesentlichen Felder zurückgeben, die für die benötigt werden Benutzeroberfläche statt vollständiger Entitäten.
-
Verwenden Sie FetchMode.LAZY und EAGER. Laden: Konfigurieren FetchMode.LAZY für Entitäten, die nicht sofort benötigt werden, und FetchMode.EAGER für Zuordnungen, die im Voraus geladen werden müssen.
OSIV in Spring Boot deaktivieren
Spring Boot aktiviert OSIV standardmäßig. Um es zu deaktivieren, legen Sie die folgende Eigenschaft in der Datei application.properties fest:
spring.jpa.open-in-view=false
Diese Einstellung stellt sicher, dass die Ruhezustandssitzung nach jeder Service-Layer-Transaktion geschlossen wird, wodurch die potenziellen Nachteile im Zusammenhang mit OSIV vermieden werden.
Das obige ist der detaillierte Inhalt vonOffene Sitzung im Ruhezustand anzeigen: Verwenden oder nicht verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn