SessionFactory.get
CurrentSession
与openSession
的区别
1. 如果使用的是get
CurrentSession
来创建session的话,在commit后,session就自动被关闭了,
也就是不用再session.close()了。但是如果使用的是openSession
方法创建的session的话,
那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭
2. get
CurrentSession
的使用可以参见hibernate\hibernate-3.2\doc\tutorial\src项目
3. 使用SessionFactory.get
CurrentSession
()需要在hibernate.cfg.xml中如下配置:
* 如果采用jdbc独立引用程序配置如下:
<property name="hibernate.current_session_context_class">thread</property>
* 如果采用了JTA事务配置如下
<property name="hibernate.current_session_context_class">jta</property>
4。Do I still need to configure
Hibernate to bind Sessions
(hibernate.current_session_context_class=thread) to the thread stack?
Does Spring take care of this automatically?
If you use LocalSessionFactoryBean, you don't need to declare hibernate.current_session_context_class=thread,
Spring
will manage it for you
. You only declare that if you're going to
encapsulate access to the session factory manually (e.g.
HibernateUtil). This is also related to the use of
SessionFactory.getCurrentSession().
There is a big difference on
how the SessionFactory.getCurrentSession() works on plain hibernate and
Spring. If you use Hibernate directly, getCurrentSession() works by
returning the current session being used, or it spawns a new session.
For the case of Spring (via LocalSessionFactoryBean), the
getHibernateTemplate().getCurrentSession() does return the current
session being used, but it does not spawn a new one if none is
available.
5. LocalSessionFactoryBean Set connection release mode "on_close" as default.
This was the case for Hibernate 3.0; Hibernate 3.1 changed
it to "auto" (i.e. "after_statement" or "after_transaction").
However, for Spring's resource management (in particular for
HibernateTransactionManager), "on_close" is the better default.
本文详细比较了SessionFactory中的getCurrentSession与openSession方法的区别。getCurrentSession在commit后会自动关闭session,而openSession则需手动关闭。此外,还介绍了如何配置Hibernate以支持getCurrentSession。
3155

被折叠的 条评论
为什么被折叠?



