Sessão de Fábrica do Hibernate

A fábrica de sessões do Hibernate é a classe de fábrica através da qual obtemos sessões e realizamos operações no banco de dados.

Fábrica de Sessões do Hibernate

A Fábrica de Sessões do Hibernate fornece três métodos pelos quais podemos obter o objeto de Sessão – getCurrentSession(), openSession() e openStatelessSession().

Fábrica de Sessões do Hibernate getCurrentSession

O método getCurrentSession() da Fábrica de Sessões do Hibernate retorna a sessão vinculada ao contexto. No entanto, para que isso funcione, precisamos configurá-lo no arquivo de configuração do Hibernate, como mostrado abaixo.

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

Se não estiver configurado para a thread, receberemos a seguinte exceção.

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)

Uma vez que este objeto de sessão pertence ao contexto do hibernate, não precisamos fechá-lo. Uma vez que a fábrica de sessão é fechada, este objeto de sessão é fechado. Objetos de Sessão do Hibernate não são seguros para uso em ambientes multithread, por isso não devemos usá-los em ambiente de múltiplas threads. Podemos usá-lo em ambiente de thread única porque é relativamente mais rápido do que abrir uma nova sessão.

Hibernate SessionFactory openSession

Hibernate SessionFactory openSession() sempre abre uma nova sessão. Devemos fechar este objeto de sessão uma vez que terminamos todas as operações de banco de dados. Devemos abrir uma nova sessão para cada solicitação em ambiente multithread. Para frameworks de aplicativos web, podemos optar por abrir uma nova sessão para cada solicitação ou para cada sessão, baseado na necessidade.

Hibernate SessionFactory openStatelessSession

java
Hibernate método openStatelessSession() da SessionFactory retorna uma instância de StatelessSession. Há outro método sobrecarregado onde podemos passar um objeto java.sql.Connection para obter um objeto de sessão sem estado do Hibernate. O StatelessSession no Hibernate não implementa o cache de primeiro nível e não interage com nenhum cache de segundo nível. Como é sem estado, não implementa gravação em segundo plano transacional, verificação suja automática ou realiza operações de cascata para entidades associadas. Coleções também são ignoradas por uma sessão sem estado. As operações realizadas por meio de uma sessão sem estado contornam o modelo de eventos e interceptores do Hibernate. É mais parecido com uma conexão JDBC normal e não oferece os benefícios que vêm do uso do framework Hibernate. No entanto, uma sessão sem estado pode ser adequada em certas situações. Por exemplo, quando estamos carregando dados em massa no banco de dados e não queremos que a sessão do Hibernate mantenha grandes dados na memória do cache de primeiro nível. Um programa simples mostrando o uso dos métodos da SessionFactory do Hibernate é dado abaixo.

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();
		
		//Sessão Atual - não é necessário fechar
		Session currentSession = sessionFactory.getCurrentSession();
		
		//abrir nova sessão
		Session newSession = sessionFactory.openSession();
		//realizar operações no banco de dados
		
		//fechar sessão
		newSession.close();
		
		//abrir sessão sem estado
		StatelessSession statelessSession = sessionFactory.openStatelessSession();
		//realizar operações de banco de dados sem estado
		
		//fechar sessão
		statelessSession.close();
		
		//fechar sessão factory
		sessionFactory.close();
		
	}

}

Isso é tudo sobre a SessionFactory no Hibernate e seus diferentes métodos para obter o objeto de sessão.

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