2013-03-25 4 views
5

У меня только что были отношения между сеансом Hibernate и Connection. Но теперь у меня возникает еще один вопрос: как работает сеанс hibernate sessionfactory? В следующем фрагменте кода: сохранить() метод класса DAO:Как работает сеанс сеанса hibernate sessionfactory?

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

Когда мы называем sessionFactory.openSession(), это создаст новую сессию, прикрепленную к текущему потоку (через ThreadLocal), эта сессия также прилагается к соединению JDBC, Но, как вы можете видеть, нам не нужно закрывать сеанс (session.close()), ни соединение. Итак, каков жизненный цикл сеанса Hibernate, в каких обстоятельствах он будет закрыт? автоматически?

ответ

9

Я рекомендую метод getCurrentSession, потому что только с помощью этого метода вы имеете возможность быть уверены, что сессия будет закрыта из спящего режима

Configuration J2EE Current Session.

Если вы используете метод openSession, вы должны закрыть сессии самостоятельно. После того, как я начал работать с спящим, я думал, что это не имеет значения, какой метод я использую, потому что вся сессия будет автоматически закрыта ... я был неправ. Я обнаружил с SessionStatistics от hibernate SessionStatistics , что открытая сессия была уже открыта и никогда не закрывалась.

После того, как я сменил все звонки на getCurrentSession и impl. вскрытый сеанс сеанса за запрос будет закрыт после работы.

Transactions Basics.

+0

Спасибо Зеллдону, я выясню это с помощью приведенных ссылок. –

Смежные вопросы