SpringMVC Hibernate报no session found for current thread

zhangsasiye 2014-04-23 09:46:27
Mavern多模块项目,Spring配置在父模块,web模块中调用其它模块的dao,service什么的。
如果在web模块中自己写一个java测试类来调用service和dao,则无异常。
但是jsp通过controller来调用的话就会报no session found for current thread。
求大神解惑!!!!!!!!!
...全文
19551 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
woailuoqzh 2016-12-29
  • 打赏
  • 举报
回复
16楼可以解决,那个提出用spring配置aop解决方式也是可以,原因是因为: !--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到/自动管理session的开启和关闭 --> <tx:annotation-driven transaction-manager="transactionManager" /> <aop:config proxy-target-class="true"> <!-- 只对业务逻辑层实施事务 --> <aop:pointcut id="basePointcut" expression="execution(* com.csair.baggageapp.*.*.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="basePointcut" /> </aop:config> <!--就是无法自动获取,要手工配置-->
kavin111 2016-05-21
  • 打赏
  • 举报
回复
curentsession必须在事物中,你加事物了么?
yi_you 2016-01-20
  • 打赏
  • 举报
回复
引用 16 楼 fangmingshijie 的回复:
那你在web.xml配置org.springframework.orm.hibernate4.support.OpenSessionInViewFilter试试。
在web.xml里添加一个filter后获取session然后select查询数据库没问题了,但是sessionFactory.getCurrentSession().save(t);这样的save和update都无效,好像没有commit,只能执行sql语句,然后手动commit,请问这是什么问题
yi_you 2016-01-20
  • 打赏
  • 举报
回复
引用 15 楼 u014803740 的回复:
[quote=引用 13 楼 zcwgogo 的回复:] 把异常贴出来,你试试在sessionFactory里面加上 <prop key="current_session_context_class">thread</prop>
一开始就是有这一句的,不行,然后我去掉了,还是不行。

严重: Servlet.service() for servlet [spring] in context with path [/sim_web] 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:988)
	at edu.cs.tnt.sim.user.dao.UserDao.getSession(UserDao.java:20)
	at edu.cs.tnt.sim.user.dao.UserDao.findByName(UserDao.java:31)
	at edu.cs.tnt.sim.user.service.impl.UserServiceImpl.Login(UserServiceImpl.java:19)
	at edu.cs.tnt.sim.user.controller.UserController.Login(UserController.java:21)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
[/quote] 在web.xml里添加一个filter后获取session然后select查询数据库没问题了,但是sessionFactory.getCurrentSession().save(t);这样的save和update都无效,好像没有commit,只能执行sql语句,然后手动commit,请问这是什么问题
yi_you 2016-01-20
  • 打赏
  • 举报
回复
引用 13 楼 zcwgogo 的回复:
把异常贴出来,你试试在sessionFactory里面加上 <prop key="current_session_context_class">thread</prop>
你好,我最近也遇到这个问题,开始报no session found for current thread 错误,sessionFactory里面加上 <prop key="current_session_context_class">thread</prop>这个配置后能获取到session了,但是又遇到另一个报错:save is not valid without active transaction。请问这个怎么解决
wfzlm 2015-11-26
  • 打赏
  • 举报
回复
已经解决了getCurrentSession改为openSession就没错误了
wfzlm 2015-11-26
  • 打赏
  • 举报
回复
已经解决了getCurrentSession改为openSession就没错误了
wawxy2009 2015-10-24
  • 打赏
  • 举报
回复
我也出现了这个问题,用了16楼的方法可以解决,还有一种解决办法是在你的SpringMVC配置文件中加入这句: <aop:aspectj-autoproxy proxy-target-class="true" /> 也可以,原理就不太清楚了
zcwgogo 2014-04-23
  • 打赏
  • 举报
回复
引用 21 楼 u014803740 的回复:
[quote=引用 18 楼 zcwgogo 的回复:]
总之还是谢谢了,只是当时一时激动分全给光了。。。不好意思[/quote]Hibernate4 和Spring整合的时候这个过滤器好像很重要: http://docs.spring.io/spring/docs/4.0.3.RELEASE/javadoc-api//org/springframework/orm/hibernate4/support/OpenSessionInViewFilter.html
zhangsasiye 2014-04-23
  • 打赏
  • 举报
回复
引用 18 楼 zcwgogo 的回复:
总之还是谢谢了,只是当时一时激动分全给光了。。。不好意思
zhangsasiye 2014-04-23
  • 打赏
  • 举报
回复
引用 18 楼 zcwgogo 的回复:
这个 <context:component-scan base-package="edu.cs.tnt.sim..*"> 改成 <context:component-scan base-package="edu.cs.tnt.sim">试试
嘿嘿,我这也是才开始学这个,所以也不知道这个问题是不是有点小白。 .OpenSessionInViewFilter这东西我一开始就没见过。
zcwgogo 2014-04-23
  • 打赏
  • 举报
回复
引用 17 楼 u014803740 的回复:
[quote=引用 16 楼 fangmingshijie 的回复:] 那你在web.xml配置org.springframework.orm.hibernate4.support.OpenSessionInViewFilter试试。
太感谢了!!!!!!!!!!!!!!!!! 配置了这个后就可以了!!!!!!!!! 谢谢版主!!!!!!!!!!!! 我得好好上网查查这个的东西的原理了。谢谢!!!!!!!![/quote]汗,这样也行.
zcwgogo 2014-04-23
  • 打赏
  • 举报
回复
这个 <context:component-scan base-package="edu.cs.tnt.sim..*"> 改成 <context:component-scan base-package="edu.cs.tnt.sim">试试
zhangsasiye 2014-04-23
  • 打赏
  • 举报
回复
引用 16 楼 fangmingshijie 的回复:
那你在web.xml配置org.springframework.orm.hibernate4.support.OpenSessionInViewFilter试试。
太感谢了!!!!!!!!!!!!!!!!! 配置了这个后就可以了!!!!!!!!! 谢谢版主!!!!!!!!!!!! 我得好好上网查查这个的东西的原理了。谢谢!!!!!!!!
  • 打赏
  • 举报
回复
那你在web.xml配置org.springframework.orm.hibernate4.support.OpenSessionInViewFilter试试。
zhangsasiye 2014-04-23
  • 打赏
  • 举报
回复
引用 13 楼 zcwgogo 的回复:
把异常贴出来,你试试在sessionFactory里面加上 <prop key="current_session_context_class">thread</prop>
一开始就是有这一句的,不行,然后我去掉了,还是不行。

严重: Servlet.service() for servlet [spring] in context with path [/sim_web] 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:988)
	at edu.cs.tnt.sim.user.dao.UserDao.getSession(UserDao.java:20)
	at edu.cs.tnt.sim.user.dao.UserDao.findByName(UserDao.java:31)
	at edu.cs.tnt.sim.user.service.impl.UserServiceImpl.Login(UserServiceImpl.java:19)
	at edu.cs.tnt.sim.user.controller.UserController.Login(UserController.java:21)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
	at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
zhangsasiye 2014-04-23
  • 打赏
  • 举报
回复
引用 6 楼 fangmingshijie 的回复:
测试代码呢。
dao里面的getCurrentSession()这一句报错。
zcwgogo 2014-04-23
  • 打赏
  • 举报
回复
把异常贴出来,你试试在sessionFactory里面加上 <prop key="current_session_context_class">thread</prop>
zhangsasiye 2014-04-23
  • 打赏
  • 举报
回复
引用 6 楼 fangmingshijie 的回复:
测试代码呢。
错误报的是No Session found for current thread,重点是不是current thread?是不是在tomcat中就是其他thread了?
zhangsasiye 2014-04-23
  • 打赏
  • 举报
回复
引用 7 楼 zcwgogo 的回复:
你的事务切面为*Dao,service并没有配置事务
错误报的是No Session found for current thread,终点是不是current thread?是不是在tomcat中就是其他thread了?
加载更多回复(10)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧