在什么情况下,会引起 hibernate 中的session 找不见?

change_solider 发布于 2014/07/09 22:22
阅读 218
收藏 1
严重: Servlet.service() for servlet [springMVC] in context with path [/ecampus] threw exception [Request processing failed; nested exception is org.hibernate.HibernateException: No Session found for current thread] with root cause
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:941)
    at com.hdecic.news.dao.implement.NewsDaoImplement.getCurrentSession(NewsDaoImplement.java:31)
    at com.hdecic.news.dao.implement.NewsDaoImplement.find(NewsDaoImplement.java:139)
    at com.hdecic.news.service.implement.NewsServiceImplement.find(NewsServiceImplement.java:60)
    at com.hdecic.news.controller.NewsController.getNewsList(NewsController.java:66)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:606)

spring 部分配置如下:


<!-- 注解方式配置事物 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- 拦截器方式配置事物 -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" />
            <tx:method name="save*" />
            <tx:method name="repairNews*" />
            <tx:method name="scheduleGetNews*" />
            <tx:method name="update*" />
            <tx:method name="modify*" />
            <tx:method name="edit*" />
            <tx:method name="delete*" />
            <tx:method name="remove*" />
            <tx:method name="repair" />
            <tx:method name="deleteAndRepair" />
            <tx:method name="find" propagation="SUPPORTS" />
            <tx:method name="getNewsList" propagation="SUPPORTS" />
            <tx:method name="get*" propagation="SUPPORTS" />
            <tx:method name="load*" propagation="SUPPORTS" />
            <tx:method name="search*" propagation="SUPPORTS" />
            <tx:method name="datagrid*" propagation="SUPPORTS" />
            <tx:method name="*" propagation="SUPPORTS" />
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="transactionPointcut"
            expression="execution(* com.hdecic.news.service.implement.*Implement.*(..))" />
        <aop:advisor pointcut-ref="transactionPointcut"
            advice-ref="transactionAdvice" />
    </aop:config>


我配置了事务了,也在web.xml文件中,配置了 open session in view... 怎么还是找不见session啊。。还有哪个需要注意的吗?

加载中
0
唐代de豆腐
唐代de豆腐
回复 @change_solider : 你是不是扫描controller时候把service也加进去的。这样会造成没有事务的。类似:
<context:component-scan base-package="com.tdu.core.web.controller,com.tdu.bpm.controller">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>

change_solider
change_solider
回复 @糖度 :OK.长见识了。。
唐代de豆腐
唐代de豆腐
回复 @change_solider : 自己多想想,有时候。。哈哈。。设置为最佳答案被。。
change_solider
change_solider
太感谢你了,你说的是对的。。
0
唐代de豆腐
唐代de豆腐
主配置文件里面不是要配置么,或是@service @transaction ,,,,open session那玩意是在你每次请求后关闭未关的连接而已。。
change_solider
change_solider
是这样,我在spring mvc 的controller 中调用 service层, 为service层添加事务。 是不是和spring mvc有关啊?因为我还有一个service,不是通过controller调用的,就可以有事务。
0
change_solider
change_solider
奇了怪了,我单用junit测试service都有事务,为什么用controller调service,却没有事务……
0
change_solider
change_solider
奇了怪了,我单用junit测试service都有事务,为什么用controller调service,却没有事务……
返回顶部
顶部