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包。

问题解决。

 

转载于:https://www.cnblogs.com/biobio/p/7754080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值