Hibernate SessionFactory

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:

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

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

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:

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.

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.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren:

centron Managed Cloud Hosting in Deutschland

Java-Array: So prüfst du Werte effizient

JavaScript
Wie prüft man, ob ein Java Array einen Wert enthält? Es gibt viele Möglichkeiten, um zu überprüfen, ob ein Java Array einen bestimmten Wert enthält. Einfache Iteration mit einer for-Schleife…
centron Managed Cloud Hosting in Deutschland

Wie berechnet man den BLEU-Score in Python?

Python
Wie berechnet man den BLEU-Score in Python? Der BLEU-Score in Python ist eine Metrik, die die Güte von maschinellen Übersetzungsmodellen misst. Ursprünglich wurde er nur für Übersetzungsmodelle entwickelt, wird jedoch…