2013-03-25 13 views
5

Ho appena avuto la relazione tra Hibernate Session e Connection. Ma ora, ho un'altra domanda: in che modo Hibernate sessionfactory gestisce la sessione? Nel seguente segmento di codice: save() metodo di una classe DAO:come fa hibernate sessionfactory a gestire la sessione?

Session session = sessionFactory.openSession(); 
    Transaction tx=null; 
    tx=session.beginTransaction(); 
    session.save(transientInstance); 
    session.flush(); 
    tx.commit(); 

Quando chiamiamo sessionFactory.openSession(), si creerà una nuova sessione attaccato al thread corrente (attraverso il ThreadLocal), questa sessione è anche attaccato a una connessione JDBC, Ma, come puoi vedere, non è necessario chiudere la sessione (session.close()), né la connessione. Quindi, qual è il ciclo di vita di una sessione di Hibernate, in quali circostanze sarà chiusa? automaticamente?

risposta

9

vi consiglio il metodo getCurrentSession perché solo con questo metodo si ha la possibilità di essere sicuri che la sessione sarà chiuso dal hibernate

Configuration J2EE Current Session.

Se si utilizza il metodo openSession, è necessario chiudere le sessioni da solo. Dopo aver iniziato a lavorare con l'ibernazione ho pensato che non importa quale metodo io uso perché tutte le sessioni saranno chiuse automaticamente ... ho sbagliato. Avevo scoperto con SessionStatistics dallo stato di ibernazione SessionStatistics che la sessione aperta era già aperta e mai chiusa.

Dopo aver modificato tutte le chiamate su getCurrentSession e impl. la sessione aperta per modello di sessione per richiesta verrà chiusa dopo il lavoro.

Transactions Basics.

+0

Grazie a Zelldon, lo scoprirò con i riferimenti forniti. –