學過Hibernate的都知道,Hibernate的延遲加載功能效率槓槓的,但是也會容易造成下面的異常:
failed to lazily initialize a collection of **********,no session or session was closed
默認情況下,開啓一個事務,就會打開session,結束一個事務後,session就會關閉,意思就是說默認情況下session是在事務中打開的。
一般的項目事務都是配置在service方法,就是運行一個service方法的時候,就會首先開啓事務,然後運行該方法,然後關閉事務。所以要是在jsp中或者沒有配置事務,而在session關閉的情況下,就很容易出現問題了。
<filter-name>Spring OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<!--
指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名稱,默認值爲sessionFactory
如果LocalSessionFactoryBean在spring中的名稱不是sessionFactory,該參數一定要指定,否則會出現找不到sessionFactory的例外
-->
<param-name>sessionFactoryBean</param-name>
<param-value>sessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>