Org.hibernate.HibernateException:没有活动事务,createQuery无效

在这个问题之后 ,我试图将Hibernate 4.3.8.Final添加到Spring 4.1.5.RELEASE; 但是 – 代码抛出一个exception,因为跟随并且有时抛出 – 它无法找到hibernate的实体类(com.myproject.model.MyTable),尽管该类存在且位于com.myproject.model包中。

堆栈跟踪

org.hibernate.HibernateException: createQuery is not valid without active transaction at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352) at com.sun.proxy.$Proxy40.createQuery(Unknown Source) at com.myproject.repository.TestRepImpl.get(TestRepImpl.java:21) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy33.get(Unknown Source) at com.myproject.service.TestServiceImpl.get(TestServiceImpl.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy35.get(Unknown Source) at com.myproject.web.MainController.index(MainController.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:177) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 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.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 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:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 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:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 

PR-servlet.xml中

    <!--  -->                    

的hibernate.cfg.xml

      12  org.hibernate.dialect.MySQLDialect  thread  true  create    

MainController

 @Controller public class MainController { @Autowired private TestService testService; @RequestMapping("/{viewName}.htm") public String index(@PathVariable(value = "viewName") String viewName) { System.err.println(viewName); testService.get(1); if (isValidView(viewName)) { return viewName; } return null; } 

TestServiceImpl

 @Service public class TestServiceImpl implements TestService { @Autowired private TestRepDao testDao; @Transactional public void get(int i) { testDao.get(i); } } 

TestRepImp

 @Repository public class TestRepImpl implements TestRepDao { @Autowired SessionFactory sessionFactory; public void get(int id) { String hql = "from MyTable where id=" + id; Query query = sessionFactory.getCurrentSession().createQuery(hql); @SuppressWarnings("unchecked") List listBusiness = (List) query.list(); System.err.println(listBusiness.get(0)); } } 

首先,您应该删除您的hibernate.cfg.xml。 通过使用您告诉Hibernate扫描Java类以获取JPA注释以构建数据库模型。

作为一个副作用,这也将删除org.hibernate.dialect.MySQLDialect这一行,因为Hibernate可以选择它自己的方言,如果你强制使用方言会导致各种奇怪的错误。 我从来没有遇到过Hibernate为我选择方言的问题。

如果你遇到任何类型的exception, Connection cannot be null when 'hibernate.dialect' is not setConnection cannot be null when 'hibernate.dialect' is not set ,这意味着Hibernate实际上无法连接到你的数据库。

Hibernate会话上下文管理是Spring不需要的,因为Spring正在控制会话上下文。

关于找不到antlr和java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener例外java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener正如我们在聊天中讨论的那样,是因为你没有使用依赖管理器来引入Spring / Hibernate所依赖的类。

您肯定是在正确的轨道上,使用Spring来管理您的会话。 会话未打开的问题是由于transactionManagersessionFactory配置错误。 我建议你用以下内容替换你的pr-servlet:

                 true true validate         

让你的交易经理工作。