我刚刚获得了Hibernate Session和Connection之间的关系。 但现在,我得到另一个问题:hibernate sessionfactory如何管理会话? 在以下代码段中: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会话的生命周期是什么,在什么情况下会被关闭?自动?
答案 0 :(得分:9)
我推荐使用getCurrentSession
方法,因为只有这种方法才能确保会话将从休眠状态关闭
Configuration J2EE Current Session.
如果您使用openSession
方法,则必须自行关闭会话。
在我开始使用hibernate后,我认为无论我使用哪种方法都没关系,因为所有会话都将自动关闭...我错了。
我从hibernate发现了SessionStatistics
SessionStatistics
公开会议已经开放,从未结束。
我将所有来电更改为getCurrentSession
和impl
后。每个请求会话模式打开的会话将在下班后关闭。