5

我刚刚得到了 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.关闭()),既不是连接。那么,Hibernate 会话的生命周期是什么,在什么情况下会关闭呢?自动地?

4

1 回答 1

9

我推荐这种getCurrentSession方法,因为只有使用这种方法,您才有可能确保会话将从休眠状态关闭

配置 J2EE 当前会话。

如果您使用该openSession方法,您必须自行关闭会话。在我开始使用休眠后,我认为我使用哪种方法并不重要,因为所有会话都会自动关闭......我错了。我从休眠 SessionStatistics的 SessionStatistics 发现打开的会话已经打开并且从未关闭。

在我将所有呼叫更改为getCurrentSessionand之后impl。Session-per-request 模式打开的会话将在工作后关闭。

交易基础

于 2013-03-25T11:38:43.697 回答