La fabrique de sessions Hibernate est la classe à travers laquelle nous obtenons des sessions et effectuons des opérations sur la base de données.
La fabrique de sessions Hibernate fournit trois méthodes par lesquelles nous pouvons obtenir un objet Session –
getCurrentSession()
, openSession()
et openStatelessSession()
.
SessionFactory getCurrentSession de Hibernate
La méthode getCurrentSession()
de la SessionFactory
Hibernate renvoie la session liée au contexte. Mais pour que cela fonctionne, nous devons le configurer dans le fichier de configuration Hibernate comme indiqué ci-dessous.
<property name="hibernate.current_session_context_class">thread</property>
Si elle n’est pas configurée pour le thread, alors nous obtiendrons l’exception suivante.
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)
Puisque cet objet session appartient au contexte Hibernate, nous n’avons pas besoin de le fermer. Une fois que la session factory est fermée, cet objet session se ferme également. Les objets Session Hibernate ne sont pas thread-safe, donc nous ne devrions pas les utiliser dans un environnement multi-thread. Nous pouvons les utiliser dans un environnement à un seul thread car cela est relativement plus rapide que d’ouvrir une nouvelle session.
Ouvrir une SessionFactory Hibernate
La méthode openSession() de la classe SessionFactory Hibernate ouvre toujours une nouvelle session. Nous devrions fermer cet objet session une fois que nous avons terminé toutes les opérations sur la base de données. Nous devrions ouvrir une nouvelle session pour chaque requête dans un environnement multi-thread. Pour les frameworks d’application web, nous pouvons choisir d’ouvrir une nouvelle session pour chaque requête ou pour chaque session en fonction des besoins.
Ouvrir une session sans état SessionFactory Hibernate
Hibernate SessionFactory
La méthode openStatelessSession() retourne une instance de StatelessSession
. Il existe une autre méthode surchargée où nous pouvons passer l’objet java.sql.Connection
pour obtenir un objet session sans état à partir de Hibernate. La StatelessSession dans Hibernate n’implémente pas de cache de premier niveau et n’interagit avec aucun cache de deuxième niveau. Étant donné qu’elle est sans état, elle n’implémente pas de write-behind transactionnel, de vérification automatique de la saleté ou ne réalise pas d’opérations de cascade vers des entités associées. Les collections sont également ignorées par une session sans état. Les opérations effectuées via une session sans état contournent le modèle d’événements et les intercepteurs de Hibernate. C’est plus comme une connexion JDBC normale et ne fournit aucun avantage lié à l’utilisation du framework Hibernate. Cependant, la session sans état peut être adaptée dans certaines situations. Par exemple, lorsque nous chargeons des données en vrac dans la base de données et que nous ne voulons pas que la session Hibernate retienne d’énormes données dans la mémoire cache de premier niveau. Un programme simple montrant l’utilisation des méthodes de SessionFactory de Hibernate est donné ci-dessous.
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();
//Session actuelle - pas besoin de fermer
Session currentSession = sessionFactory.getCurrentSession();
//Ouvrir une nouvelle session
Session newSession = sessionFactory.openSession();
//Effectuer des opérations sur la base de données
//Fermer la session
newSession.close();
//Ouvrir une session sans état
StatelessSession statelessSession = sessionFactory.openStatelessSession();
//Effectuer des opérations sur la base de données sans état
//Fermer la session
statelessSession.close();
//Fermer la session factory
sessionFactory.close();
}
}
C’est tout pour la SessionFactory dans Hibernate et ses différentes méthodes pour obtenir un objet session.
Source:
https://www.digitalocean.com/community/tutorials/hibernate-sessionfactory