JPA断开连接到MYSQL

时间:2016-05-08 14:58:55

标签: mysql spring hibernate spring-mvc jpa

例外:

  

从服务器成功收到的最后一个数据包是2,405,585   几毫秒之前。成功发送到服务器的最后一个数据包是   30,340毫秒之前。           javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException:无法解压缩   结果集           警告:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL错误:0,SQLState:null           错误: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)             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)             在org.springframework.orm.jpa.SharedEntityManagerCreator $ DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:310)             at com.sun.proxy。$ Proxy27.getResultList(Unknown Source)             在 com.health.dao.HospitalDaoImpl.findByPostcode(HospitalDaoImpl.java:32)             在com.health.service.HospitalServiceImpl.findHospitalByPostCode(HospitalServiceImpl.java:21)             在com.health.travel.HospitalController.search(HospitalController.java:64)             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)             在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)             at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)             at 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)             at 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)             at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)             at 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)             at 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();
        }
    }

1 个答案:

答案 0 :(得分:0)

您在方法中两次致电em.close(),但您不需要其中任何一种。正如您使用@Transactional注释的方法一样,Spring框架将负责将其作为声明性事务进行管理并打开 - 关闭连接(如果已正确配置它)。

另见: