我刚刚了解了Hibernate会话和连接之间的关系。但是现在,我得到了另一个问题: hibernate会话工厂是如何管理会话的?在下面的代码段中: DAO类的save()方法:
Session session = sessionFactory.openSession();
Transaction tx=null;
tx=session.beginTransaction();
session.save(transientInstance);
session.flush();
tx.commit();当我们调用sessionFactory.openSession()时,它将创建一个附加到当前线程的新会话(通过ThreadLocal),该会话也附加到一个JDBC连接,但是,正如您所看到的,我们不需要关闭会话(session.close()),也不需要关闭连接。那么,Hibernate会话的生命周期是什么,在什么情况下会被关闭呢?自动的?
发布于 2013-03-25 19:38:44
我推荐使用getCurrentSession方法,因为只有使用此方法,您才有可能确保从hibernate关闭会话
Configuration J2EE Current Session.
如果使用openSession方法,则必须自行关闭会话。在我开始使用hibernate后,我认为使用哪种方法并不重要,因为所有会话都将自动关闭……我错了。我使用hibernate SessionStatistics中的SessionStatistics发现,打开的会话已经打开,并且从未关闭。
在我将所有调用都改为getCurrentSession和impl之后。Session-per-request模式打开的会话将在工作后关闭。
https://stackoverflow.com/questions/15613540
复制相似问题