【问题标题】:JPA Disconnect to MYSQL [duplicate]JPA断开与MYSQL的连接[重复]
【发布时间】:2016-09-03 05:28:53
【问题描述】:

例外:

从服务器成功接收到的最后一个数据包是 2,405,585 毫秒前。最后一个成功发送到服务器的数据包是 30,340 毫秒前。 javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException:无法提取 结果集 警告:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL 错误:0,SQLState:空 错误:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 已经关闭。 在 org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) 在 org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) 在 org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:458) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:310) 在 com.sun.proxy.$Proxy27.getResultList(未知来源) 在 com.health.dao.HospitalDaoImpl.findByPostcode(HospitalDaoImpl.java:32) 在 com.health.service.HospitalServiceImpl.findHospitalByPostCode(HospitalServiceImpl.java:21) 在 com.health.travel.HospitalController.search(HospitalController.java:64) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 引起:org.hibernate.exception.JDBCConnectionException:无法提取ResultSet 在 org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132) 在 org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 在 org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:89) 在 org.hibernate.loader.Loader.getResultSet(Loader.java:2065) 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) 在 org.hibernate.loader.Loader.doQuery(Loader.java:909) 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) 在 org.hibernate.loader.Loader.doList(Loader.java:2553) 在 org.hibernate.loader.Loader.doList(Loader.java:2539) 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) 在 org.hibernate.loader.Loader.list(Loader.java:2364) 在 org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496) 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) 在 org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231) 在 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) 在 org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) 在 org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) 在 org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) ... 46 更多 引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通讯链路故障

com.health.dao.HospitalDaoImpl.findHospitalByPostCode

/**
     * Find hospital by post code
     */
    @SuppressWarnings("unchecked")
    @Transactional
    @Override
    public List<Hospital> findByPostcode(int postcode) {
        try {
            String str = "SELECT h FROM Hospital h WHERE h.postcode BETWEEN ?1 AND ?2";
            Query query = em.createQuery(str);
            query.setParameter(1, postcode - 2);
            query.setParameter(2, postcode + 2);
            return query.getResultList();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            em.close();
            e.printStackTrace();
            return null;
        } finally {
            em.close();
        }
    }

【问题讨论】:

    标签: mysql spring hibernate spring-mvc jpa


    【解决方案1】:

    你在你的方法中调用了两次em.close(),但你不应该需要它们中的任何一个。由于您拥有使用 @Transactional 注释的方法,因此 Spring 框架将负责将其作为声明性事务进行管理并打开-关闭连接(如果您已正确配置)。

    另请参阅:

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 2018-10-20
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多