Heim > Java > javaLernprogramm > Ist Open Session in View (OSIV) im Ruhezustand eine schlechte Praxis und welche Alternativen gibt es?

Ist Open Session in View (OSIV) im Ruhezustand eine schlechte Praxis und welche Alternativen gibt es?

Barbara Streisand
Freigeben: 2024-11-24 07:21:13
Original
368 Leute haben es durchsucht

Is Open Session in View (OSIV) in Hibernate a Bad Practice and What are the Alternatives?

Warum Open Session in View in Hibernate eine schlechte Praxis ist

Open Session in View (OSIV) ist ein Muster in Hibernate, das das Beibehalten erfordert Die Sitzung wird während einer HTTP-Anfrage geöffnet. Während dies für die Vermeidung von LazyLoadExceptions vorteilhaft erscheinen mag, bringt es zahlreiche Nachteile mit sich:

Probleme mit der Datenbankperspektive:

  • Auto-Commit-Modus: Da Transaktionen von der Serviceschicht, aber nicht explizit in OSIV festgeschrieben werden, werden nachfolgende Datenbankanweisungen aus dem UI-Rendering im Auto-Festschreibungsmodus ausgeführt. Dies belastet den Datenbankserver, da häufige Transaktionsprotokolllöschungen erforderlich sind.
  • Gemischte Anweisungsquellen: OSIV ermöglicht die Generierung von Anweisungen sowohl durch die Serviceschicht als auch durch den UI-Rendering-Prozess, was das Testen erschwert Datenbankinteraktionen über Ebenen hinweg.

Codekomplexität und Skalierbarkeit Probleme:

  • Eingeschränkte UI-Funktionen: OSIV beschränkt die UI-Ebene auf das Navigieren von Assoziationen, was möglicherweise N 1-Abfrageprobleme auslöst.
  • Verbindung halten: OSIV kann die Datenbankverbindung während des gesamten UI-Renderings halten, wodurch die Lease-Zeit der Verbindung erhöht und die Transaktion reduziert wird Durchsatz.

Überlegungen zu Spring Boot:

In Spring Boot ist OSIV standardmäßig aktiviert. Es wird empfohlen, es zu deaktivieren, indem Sie spring.jpa.open-in-view=false in der Anwendungskonfiguration festlegen.

Alternative Strategien zur Vermeidung von LazyLoadExceptions:

Anstelle von OSIV, bedenken Sie:

  • Eifrig Beziehungen aufbauen: Rufen Sie schnell die von der Ansichtsschicht benötigten Assoziationen ab und stellen Sie sicher, dass sie geladen werden, wenn die Entität abgerufen wird.
  • Explizites Abrufen in der Serviceschicht: Verwenden Sie Methoden wie fetch(), um Assoziationen vor dem Rendern explizit abzurufen die Ansicht.
  • Projektionen: Verwenden Sie Projektionen, um nur die Daten abzurufen, die von der Ansichtsebene benötigt werden, und unnötige Daten zu vermeiden Lazy Initialization.
  • Kriterien-API: Nutzen Sie die Kriterien-API, um Abfragen und Eager-Fetch-Zuordnungen anzupassen.
  • Entitätsdiagramme: Definieren Sie Entitätsdiagramme zur Optimierung Abrufen von Assoziationen basierend auf spezifischen Anwendungsfällen.

Das obige ist der detaillierte Inhalt vonIst Open Session in View (OSIV) im Ruhezustand eine schlechte Praxis und welche Alternativen gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage