Spring整合hibernate,session什么时候关闭
Posted z_java_20150812
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring整合hibernate,session什么时候关闭相关的知识,希望对你有一定的参考价值。
<bean id="sessionFactory_hotelbeds" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource_hotelbeds" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl_auto">$hibernate.hbm2ddl_auto</prop>
<prop key="hibernate.dialect">$hibernate.dialect.oracle</prop>
<prop key="hibernate.show_sql">$hibernate.show_sql</prop>
<prop key="hibernate.format_sql">$hibernate.format_sql</prop>
<prop key="hibernate.current_session_context_class">$hibernate.current_session_context_class</prop>
</props>
</property>
</bean>
hibernate.current_session_context_class的属性值为:org.springframework.orm.hibernate4.SpringSessionContext,由spring来管理session。
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
说明一下Open Session in View的作用,就是允许在每次的整个request的过程中使用同一个hibernate session,可以在这个request任何时期lazy loading数据。
如果是singleSession=false的话,就不会在每次的整个request的过程中使用同一个hibernate session,而是每个数据访问都会产生各自的seesion,等于没有Open Session in View.
OpenSessionInViewFilter默认是不会对session 进行flush的,并且flush mode 是 never 。
这会出现,在一次请求中,先后调用了service方法A,service方法B,在这两个方法中,是同一个session。如果方法A修改了一条数据,那么在方法B中去查询这条数据,并不是从数据库中查询的,而是从session缓存中取的,因此取到的不是最新数据(取到的是修改之前的数据)。
以上是关于Spring整合hibernate,session什么时候关闭的主要内容,如果未能解决你的问题,请参考以下文章
SSH框架系列之 Spring 整合 Hibernate 框架
Spring 学习之二(Spring 和 hibernate 整合)