在整合springMVC与hibernate时,DAO层在getCurrentSession()时报错:
HTTP Status 500 - Request processing failed; nested exception is org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
错误跟踪到sessionFactory.getCurrentSession();:
protected Session getCurrentSession() { return this.sessionFactory.getCurrentSession(); }
网上找了几个解决方案(http://www.cnblogs.com/chyu/p/4817291.html)均未解决。
而后在http://bbs.csdn.net/topics/390971954问答的3楼中看到:
我也遇到过这个问题,我的是在Controller中的扫描路径错了,如果在Controller中也扫描了Service,这个时候的Service是没有事务特性的,所以会报错。
解决方案就是不要在Controller中扫描事务相关的Service。参考:http://blog.csdn.net/frankcheng5143/article/details/51308344
遂开始检查扫描路径,首先web工程的web.xml引入spring-web.xml和springmvc-servlet.xml:
spring-web.xml:
<!-- 扫描路径,不扫描Controller --> <context:component-scan base-package="casic.bj"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
springmvc-servlet.xml:
<!-- 设置使用注解的类所在的jar包 --> <context:component-scan base-package="casic.bj"></context:component-scan> <!-- 启用spring mvc 注解 --> <mvc:annotation-driven /> <mvc:default-servlet-handler /> <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean>
其中springmvc-servlet.xml负责扫描controller,而扫描范围为整个项目路径,所以将service也一并扫描,导致出现以上错误。
解决方法:
修改:
base-package="casic.bj"
为
base-package="casic.bj.controller"
即仅扫描相应controller包。
问题解决。