Tutorials  /  JavaScript

Hibernate SessionFactory: Methoden und Vorteile erklärt

Ccentron Redaktion · Dezember 2024 ·3 Min. Lesezeit ·JavaScript, Tutorial

Hibernate SessionFactory ist die Factory-Klasse, über die wir Sitzungen erhalten und Datenbankoperationen durchführen können.

Die Hibernate SessionFactory

Hibernate SessionFactory stellt drei Methoden bereit, mit denen wir ein Session-Objekt erhalten können: getCurrentSession(), openSession() und openStatelessSession().

Hibernate getCurrentSession

Die Methode Hibernate SessionFactory getCurrentSession() gibt die an den Kontext gebundene Sitzung zurück. Damit dies funktioniert, müssen wir dies in der Hibernate-Konfigurationsdatei wie unten gezeigt konfigurieren:

Code
<property name="hibernate.current_session_context_class">thread</property>

Wenn dies nicht auf thread konfiguriert ist, erhalten wir die folgende Ausnahme:

Code
Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured!
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1012)
    at com.journaldev.hibernate.main.HibernateSessionExample.main(HibernateSessionExample.java:16)

Da dieses Sitzungsobjekt zum Hibernate-Kontext gehört, müssen wir es nicht schließen. Sobald die SessionFactory geschlossen wird, wird dieses Sitzungsobjekt ebenfalls geschlossen. Hibernate-Sitzungsobjekte sind nicht threadsicher, daher sollten wir sie nicht in einer Multi-Thread-Umgebung verwenden. In einer Single-Thread-Umgebung können sie jedoch verwendet werden, da sie schneller sind als das Öffnen einer neuen Sitzung.

Hibernate SessionFactory openSession

Die Methode Hibernate SessionFactory openSession() öffnet immer eine neue Sitzung. Wir sollten dieses Sitzungsobjekt schließen, sobald alle Datenbankoperationen abgeschlossen sind. In einer Multi-Thread-Umgebung sollten wir für jede Anfrage eine neue Sitzung öffnen. Für Webanwendungsframeworks können wir je nach Bedarf wählen, ob wir für jede Anfrage oder für jede Sitzung eine neue Sitzung öffnen möchten.

Hibernate openStatelessSession

Die Methode Hibernate SessionFactory openStatelessSession() gibt eine Instanz von StatelessSession zurück. Es gibt eine weitere überladene Methode, bei der wir ein java.sql.Connection-Objekt übergeben können, um ein Stateless-Session-Objekt von Hibernate zu erhalten. StatelessSession in Hibernate implementiert keinen First-Level-Cache und interagiert nicht mit einem Second-Level-Cache. Da sie zustandslos ist, implementiert sie keine Transaktions-Schreibvorgänge, keine automatische Dirty-Checking oder kaskadierende Operationen zu zugehörigen Entitäten. Collections werden von einer Stateless-Session ebenfalls ignoriert. Über eine Stateless-Session durchgeführte Operationen umgehen das Ereignismodell und die Interceptoren von Hibernate. Sie ähnelt eher einer normalen JDBC-Verbindung und bietet keine Vorteile, die durch die Verwendung des Hibernate-Frameworks entstehen.

In bestimmten Situationen kann eine Stateless-Session jedoch eine gute Wahl sein. Beispielsweise, wenn wir Massendaten in eine Datenbank laden und nicht möchten, dass die Hibernate-Session große Daten im First-Level-Cache speichert. Ein einfaches Programm, das die Verwendung der Hibernate SessionFactory-Methoden zeigt, ist unten angegeben:

Go
package com.journaldev.hibernate.main;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.StatelessSession;

import com.journaldev.hibernate.util.HibernateUtil;

public class HibernateSessionExample {

    public static void main(String[] args) {
        
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        
        // Aktuelle Sitzung - muss nicht geschlossen werden
        Session currentSession = sessionFactory.getCurrentSession();
        
        // Neue Sitzung öffnen
        Session newSession = sessionFactory.openSession();
        // Datenbankoperationen durchführen
        
        // Sitzung schließen
        newSession.close();
        
        // Stateless-Session öffnen
        StatelessSession statelessSession = sessionFactory.openStatelessSession();
        // Zustandslose Datenbankoperationen durchführen
        
        // Sitzung schließen
        statelessSession.close();
        
        // SessionFactory schließen
        sessionFactory.close();
    }

}

Das ist alles zur SessionFactory in Hibernate und ihren verschiedenen Methoden, um Sitzungsobjekte zu erhalten.

VM

Passende Infrastruktur bei centron

Node-Anwendungen wollen deployt werden: ccloud³ VMs mit vollem Root-Zugriff ab 3,12 € im Monat – oder gleich als Managed Server, wenn der Betrieb nicht bei Ihnen liegen soll. Cloud Server mieten →

Fazit

Hibernate SessionFactory ist ein leistungsstarkes Tool zur Verwaltung von Datenbanksitzungen. Durch das Verständnis der Unterschiede zwischen getCurrentSession(), openSession() und openStatelessSession() können Entwickler den richtigen Ansatz basierend auf den Anforderungen ihrer Anwendung wählen und sowohl Leistung als auch Skalierbarkeit sicherstellen.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie JavaScript
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren