Session: est une session entre l'application et la base de données, le centre de l'opération Hibernate et la base des opérations de couche de persistance. Le cycle de vie des objets / gestion des transactions / accès à la base de données est étroitement lié à la session.
L'objet de session est construit via SessionFactory. Voici un exemple pour introduire deux façons d'obtenir des sessions par hibernate.
Les journaux sont une préoccupation très courante dans la programmation. Lorsque les utilisateurs fonctionnent sur des bases de données, ils doivent enregistrer cette série d'opérations pour suivre la dynamique de la base de données. Ainsi, lorsqu'un utilisateur insère un enregistrement dans la base de données, il doit enregistrer un enregistrement dans le fichier journal. La série d'opérations de l'utilisateur doit être effectuée lors d'une session, sinon cela deviendra deux threads. Il n'y a aucune garantie de synchronisation. Regardez le code suivant
Outils de session de gestion de HiberNateUtil
Package com.bjpowernode.usermgr.util; import org.hibernate.session; // Hibernate3's import org.hibernate.sessionfactory; import org.hibernate.cfg.configuration; public class HiberNateutils {private static sessionfactory factory; static {try {// a lu Hibernate.cfg.xml factory static {try {// a lu Hibernate.cfg.xml Fixe static {Try {// Read HiberNate.cfg.xml Fixe static {Try {// Read HiberNate.cfg.xml Configuration STATIC {Try {// Read cfg=new Configuration().configure();//Create SessionFactory factory=cfg.buildSessionFactory();}catch(Exception e){e.printStackTrace();}}//Get the open Session public static Session getSession(){return factory.openSession();}//Close Session public static void closeSession(Session session) {if (session! = null) {if (session.isopen ()) {session.close ();}}} public static SessionFactory getSessionFactory () {return factory;}}}Couche de logique commerciale des utilisateurs
package com.bjpowernode.usermgr.manager; import java.util.date; import org.hibernate.sse; import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.domine.user; import com.bjpowerNode.usermgr.util.hiberNateUtils; classe publique Usermanagerrimple {/ ** * Les deux utilisateurs ajoutant et en ajoutant des journaux utilisent la même session, donc * lorsque l'ajout d'utilisateurs échoue, les journaux échoueront également. Rollback de transaction * L'utilisateur ajoute des journaux de réussite et ajoutera également le succès * / public void addUser (utilisateur utilisateur) {session session = null; try {// Obtenez le thread actuel session session = hibernateutils.getSessionFactory (). GetCurrentSession (); session.beigingransaction (); // SAVE User session.save (utilisateur); log = new log (); Log "); log.setTime (new Date ()); log.setdetail (" xxx "); logManager LogManager = new LogManageImpl (); // Enregistrer les journaux LogManager.Addlog (log); session.getTransaction (). Commit ();} Catch (exception e) {e.printStackTrace (); session.getTransaction ().););Classe d'implémentation du journal:
Package com.bjpowernode.usermgr.manager; import org.hibernate.session; import com.bjpowernode.usermgr.domain.log; importance com.bjpowernode.usermgr.util.hibernateutils; classe publique LogManageriMpl met en œuvre le fil LogManager {public Void addlog (LOG LOG) {// gère session de la session actuelle du fil HibernateUtils.getSessionFactory (). GetCurrentSession (). Enregistrer (log);}}Classe de test
package com.bjpowernode.usermgr.manager; import junit.framework.testcase; import com.bjpowernode.usermgr.domain.user; classe publique UsermanagerImplTest étend TestCase {public void testAdDuser () {usermanager usermanager = new UsermanagerMpl (); user = new user (); user.setName ("Zhang San"); usermanager.adduser (utilisateur); }Avis:
1. Quelle est la différence entre Opencession et GetCurrentession?
* L'ouverture doit être fermée, Currentession sera fermée automatiquement une fois la transaction terminée.
* L'ouverture n'est pas liée au thread actuel, Currentession est liée au thread actuel
2. Si vous utilisez Currentession, vous devez le configurer dans le fichier hibernate.cfg.xml:
* S'il s'agit d'une transaction locale (transaction JDBC)
<propriétéName = "hibernate.current_session_context_class"> Thread </ Property>
* S'il s'agit d'une transaction mondiale (transaction JTA)
<propriétéName = "hibernate.current_session_context_class"> jta </ / propriété>
Transactions globales: transactions gérées et coordonnées par l'explorateur qui peuvent s'étendre sur plusieurs bases de données et processus. Le gestionnaire de ressources utilise généralement le protocole de soumission XA en deux étapes pour interagir avec le "Système d'information d'entreprise" (EIS) ou la base de données.
Transactions locales: transactions locales à une seule EIS ou base de données et limitée à un seul processus. Les transactions locales n'impliquent pas plusieurs sources de données.
Résumer
Ce qui précède est l'intégralité du contenu de cet article sur les deux exemples de code d'obtention de session en hibernate. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer:
Analyse de l'instance d'ajout, de supprimer, de réviser et de rechercher dans la session
Apprenez rapidement sur la session en hibernate
HiberNate utilise HBM.XML pour configurer l'analyse des relations de cartographie
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!