今天搭建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>