Heim >Java >javaLernprogramm >Offene Sitzung im Ruhezustand anzeigen: Verwenden oder nicht verwenden?

Offene Sitzung im Ruhezustand anzeigen: Verwenden oder nicht verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-06 01:30:13727Durchsuche

Hibernate Open Session in View: To Use or Not to Use?

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