Could not obtain transaction-synchronized Session for current thread 解决办法

在整合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包。

问题解决。

 

posted @ 2017-10-30 13:28  MYHTML  阅读(5762)  评论(0编辑  收藏  举报