今天搭建SpringMVC3.2+Hibernate4.2的環境,以註解的形式去搭建,在使用單元測試去測試Hibernate的時候沒有錯誤,但是開啓Tomcat服務用Controller去測試Hibernate的時候一直報下面的錯誤。
嚴重: Servlet.service() for servlet springmvc threw exception
org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:990)
at com.zjoa.dao.impl.common.BaseDaoImpl.getSession(BaseDaoImpl.java:61)
at com.zjoa.dao.impl.common.BaseDaoImpl.add(BaseDaoImpl.java:65)
at com.zjoa.service.UserService.add(UserService.java:22)
at com.zjoa.controller.BaseController.add(BaseController.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
將實現類基類裏面獲取的session的sessionFactory.getCurrentSession();代碼修改爲sessionFactory.openSession();就沒有錯誤了,但是這並不是我想要的,所以努力回憶自己以前搭建環境的過程,並查找資料發現,自己真的大意了,居然沒有配置延遲加載。
在web.xml中添加如下代碼,問題就解決了。
<!-- 解決延遲加載問題 -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>