2013-03-25 97 views
5

我刚刚得到了Hibernate Session和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方法被关闭,你必须关闭会话由你自己。 在我开始使用hibernate之后,我认为它不重要,因为所有会话都会自动关闭......我错了。 我发现SessionStatistics从休眠状态 SessionStatistics 发现打开的会话已经打开,永远不会关闭。

当我将所有电话更改为getCurrentSessionimpl。 Session-per-request模式打开会话将在下班后关闭。

Transactions Basics

+0

感谢Zelldon,我会根据给出的参考资料解决它。 – 2013-03-26 02:59:44