Hibernate SessionFactory

Die Hibernate SessionFactory ist die Fabrikklasse, über die wir Sitzungen erhalten und Datenbankoperationen ausführen.

Hibernate SessionFactory

Die Hibernate SessionFactory bietet drei Methoden, um ein Session-Objekt zu erhalten: getCurrentSession(), openSession() und openStatelessSession().

Hibernate SessionFactory getCurrentSession

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

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

Wenn es nicht auf den Thread konfiguriert ist, erhalten wir untenstehende 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 Sitzungsfabrik geschlossen ist, wird dieses Sitzungsobjekt geschlossen. Hibernate-Sitzungsobjekte sind nicht threadsicher, daher sollten wir sie nicht in einer multithreaded Umgebung verwenden. Wir können es in einer einzigen Thread-Umgebung verwenden, weil es relativ schneller ist als das Öffnen einer neuen Sitzung.

Hibernate SessionFactory openSession

Hibernate SessionFactory openSession() Methode öffnet immer eine neue Sitzung. Wir sollten dieses Sitzungsobjekt schließen, sobald wir mit allen Datenbankoperationen fertig sind. Für Webanwendungsframeworks können wir wählen, ob wir für jede Anfrage eine neue Sitzung oder für jede Sitzung auf Anfragebasis öffnen möchten.

Hibernate SessionFactory openStatelessSession

Hibernate SessionFactory openStatelessSession() Methode 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 Cache der ersten Ebene und interagiert nicht mit einem Cache der zweiten Ebene. Da es zustandslos ist, implementiert es kein transaktionales Write-Behind oder automatisches Dirty-Checking oder führt kaskadierende Operationen auf zugehörige Entitäten durch. Auch Kollektionen werden von einer zustandslosen Sitzung ignoriert. Operationen, die über eine zustandslose Sitzung ausgeführt werden, umgehen das Ereignismodell und Interzeptoren von Hibernate. Es ist eher wie eine normale JDBC-Verbindung und bietet keine Vorteile, die aus der Verwendung des Hibernate-Frameworks resultieren. Eine zustandslose Sitzung kann jedoch in bestimmten Situationen sinnvoll sein. Zum Beispiel, wenn wir große Datenmengen in die Datenbank laden und nicht möchten, dass die Hibernate-Sitzung eine enorme Menge an Daten im Cache der ersten Ebene speichert. Ein einfaches Programm, das die Verwendung von 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 - kein Bedarf zu schließen
		Session currentSession = sessionFactory.getCurrentSession();
		
		//neue Sitzung öffnen
		Session newSession = sessionFactory.openSession();
		//Datenbankoperationen durchführen
		
		//Sitzung schließen
		newSession.close();
		
		//zustandslose Sitzung öffnen
		StatelessSession statelessSession = sessionFactory.openStatelessSession();
		//zustandslose Datenbankoperationen durchführen
		
		//Sitzung schließen
		statelessSession.close();
		
		//Sitzung schließen factory
		sessionFactory.close();
		
	}

}

Das ist alles für SessionFactory in Hibernate und seine verschiedenen Methoden zum Abrufen des Sitzungsobjekts.

Source:
https://www.digitalocean.com/community/tutorials/hibernate-sessionfactory