我刚刚有了Hibernate Session和Connection之间的关系。但是现在,我又遇到一个问题:hibernate会话工厂如何管理会话?在以下代码段中:DAO类的save()方法:
Session session = sessionFactory.openSession(); Transaction tx=null; tx=session.beginTransaction(); session.save(transientInstance); session.flush(); tx.commit();
当我们调用时sessionFactory.openSession(),它将创建一个新会话(通过ThreadLocal附加到当前线程),该会话也附加到JDBC连接。但是,正如您所看到的,我们不需要关闭该会话(会话。 close()),都没有连接。那么,Hibernate会话的生命周期是什么,在什么情况下将被关闭?自动吗?
sessionFactory.openSession()
我建议使用此getCurrentSession方法,因为只有使用此方法,您才能确保会话将从hibernate中关闭
getCurrentSession
配置J2EE当前会话。
如果使用该openSession方法,则必须自己关闭会话。在我开始使用hibernate模式后,我认为使用哪种方法都没有关系,因为所有会话都将自动关闭…我错了。我从hibernate SessionStatistics的SessionStatistics中 发现,打开的会话已经打开并且从未关闭过。
openSession
在我将所有呼叫更改为getCurrentSession和之后impl。每个会话的会话模式打开的会话将在工作后关闭。
impl
交易基础。