SessionFactory de Hibernate

La clase SessionFactory de Hibernate es la clase de fábrica a través de la cual obtenemos sesiones y realizamos operaciones en la base de datos.

SessionFactory de Hibernate

La SessionFactory de Hibernate proporciona tres métodos a través de los cuales podemos obtener el objeto Session: getCurrentSession(), openSession() y openStatelessSession().

getCurrentSession de la SessionFactory de Hibernate

El método getCurrentSession() de Hibernate SessionFactory devuelve la sesión ligada al contexto. Pero para que funcione, necesitamos configurarlo en el archivo de configuración de hibernate como se muestra a continuación.

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

Si no está configurado para el hilo, entonces obtendremos la siguiente excepción.

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)

Dado que este objeto de sesión pertenece al contexto de hibernate, no necesitamos cerrarlo. Una vez que la fábrica de sesiones se cierra, este objeto de sesión también se cierra. Los objetos de sesión de Hibernate no son seguros para subprocesos, por lo que no debemos usarlos en un entorno de múltiples hilos. Podemos utilizarlos en un entorno de un solo hilo porque es relativamente más rápido que abrir una nueva sesión.

Hibernate SessionFactory openSession

El método openSession() de Hibernate SessionFactory siempre abre una nueva sesión. Debemos cerrar este objeto de sesión una vez que hayamos terminado con todas las operaciones de la base de datos. Deberíamos abrir una nueva sesión para cada solicitud en un entorno de múltiples hilos. Para marcos de aplicaciones web, podemos optar por abrir una nueva sesión para cada solicitud o para cada sesión según el requisito.

Hibernate SessionFactory openStatelessSession

El método openStatelessSession() de la clase SessionFactory en Hibernate devuelve una instancia de StatelessSession. Existe otro método sobrecargado donde podemos pasar un objeto java.sql.Connection para obtener un objeto de sesión sin estado de Hibernate. La StatelessSession en Hibernate no implementa la caché de primer nivel y no interactúa con ninguna caché de segundo nivel. Dado que es sin estado, no implementa la escritura en segundo plano transaccional ni la comprobación automática de cambios, ni realiza operaciones en cascada en entidades asociadas. Las colecciones también son ignoradas por una sesión sin estado. Las operaciones realizadas a través de una sesión sin estado pasan por alto el modelo de eventos e interceptores de Hibernate. Es más como una conexión JDBC normal y no proporciona los beneficios que se obtienen al usar el framework de Hibernate. Sin embargo, la sesión sin estado puede ser adecuada en ciertas situaciones. Por ejemplo, cuando cargamos datos a granel en la base de datos y no queremos que la sesión de Hibernate retenga datos enormes en la memoria de la caché de primer nivel. A continuación, se muestra un programa simple que muestra el uso de los métodos de SessionFactory en Hibernate.

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();
		
		// Sesión actual, no es necesario cerrarla
		Session currentSession = sessionFactory.getCurrentSession();
		
		// Abrir una nueva sesión
		Session newSession = sessionFactory.openSession();
		// Realizar operaciones en la base de datos
		
		// Cerrar la sesión
		newSession.close();
		
		// Abrir una sesión sin estado
		StatelessSession statelessSession = sessionFactory.openStatelessSession();
		// Realizar operaciones en la base de datos sin estado
		
		// Cerrar la sesión
		statelessSession.close();
		
		// Cerrar la sesión factory
		sessionFactory.close();
		
	}

}

Eso es todo acerca de SessionFactory en Hibernate y sus diferentes métodos para obtener un objeto de sesión.

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