• hibernate的 openSession 和 getCurrentSession


    录:

    1、hibernate执行过程
    2、getCurrentSession() 与 openSession() 区别
    3、测试 openSession
    4、测试 getCurrentSession
      4.1、报错:Calling method 'createQuery' is not valid without an active transaction (Current status: NOT_ACTIVE)"
      4.2、报错 ERROR (AbstractPlatformTransactionManager.java:905) : Commit exception overridden by rollback exception

    1、hibernate执行过程    <--返回目录

      1)应用程序先调用 Configuration 类,该类读取 Hibernate 的配置文件及映射文件中的信息,并用这些信息生成一个 SessionFactory 对象
      2)利用 SessionFactory 对象得到 session 对象,两种方式:getCurrentSession()与 openSession()
      3)session 对象开启事务,得到一个事务对象:Transaction tx= session.beginTransaction();
      4)利用session对象的方法 get load save delete 操作 pojo 实体类
      5)事务提交 + session.close() + sessionfactory.close()

    2、getCurrentSession() 与 openSession() 区别   <--返回目录

        1)getCurrentSession 创建的 session 会绑定到当前线程, 而 openSession 不会。
        2)getCurrentSession 创建的线程会在事务回滚或事物提交后自动关闭,而 openSession 必须手动关闭(session.close)
        3)openSession()打开的是新的 session, getCurrentSession 会先从上下文找,有 session 就拿过来用,没有就创造新的 session
     4)使用getCurrentSession()必须开启事物。否则抛出异常org.hibernate.HibernateException:createQuery is not valid without active transaction

    3、测试 openSession   <--返回目录

      使用openSession() 获取 session, 注释掉 session.close(), 访问测试

        @Override
        public List<FactComsumption> getFactComsumptionList(Integer companyId, Integer merchantId, Integer cityId, String startDate, String endDate) {
            Session session = this.getHibernateTemplate().getSessionFactory().openSession();
            List<FactComsumption> list = FacadeFunctions.getFactTableListByDateInterval(session, FactComsumption.class, "FactComsumption", companyId, merchantId, cityId, startDate, endDate);
         // session.close();
            return list;
        }

      多次访问进行测试,测试发现第 5 次就会出现下面的情况

      异常栈信息 Caused by: org.postgresql.util.PSQLException: 致命错误: 对不起, 已经有太多的客户

    09:42:29.045 WARN  (ConnectionFactoryImpl.java       :317) : SQLException occurred while connecting to localhost:5432
    org.postgresql.util.PSQLException: 致命错误: 对不起, 已经有太多的客户 (pgjdbc: autodetected server-encoding to be GB2312, if the message is not readable, please check database logs and/or host, port, dbname, user, password, pg_hba.conf)
            at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473)
            at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205)
            at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
            at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
            at org.postgresql.Driver.makeConnection(Driver.java:452)
            at org.postgresql.Driver.connect(Driver.java:254)
            at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
            at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
            at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)
            at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
            at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
            at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
            at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
            at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106)
            at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:47)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148)
            at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1984)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1914)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1892)
            at org.hibernate.loader.Loader.doQuery(Loader.java:937)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)
            at org.hibernate.loader.Loader.doList(Loader.java:2689)
            at org.hibernate.loader.Loader.doList(Loader.java:2672)
            at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506)
            at org.hibernate.loader.Loader.list(Loader.java:2501)
            at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)
            at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:395)
            at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220)
            at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508)
            at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)
            at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)
            at com.sanlian.bigdata.facade.support.FacadeFunctions.getFactTableListByDateInterval(FacadeFunctions.java:67)
            at com.sanlian.bigdata.facade.impl.FactComsumptionFacadeImpl.getFactComsumptionList(FactComsumptionFacadeImpl.java:39)
            at com.sanlian.bigdata.service.impl.FactComsumptionServiceImpl.lambda$getDailyComsumpOfCity$1(FactComsumptionServiceImpl.java:53)
            at java.util.ArrayList.forEach(ArrayList.java:1249)
            at com.sanlian.bigdata.service.impl.FactComsumptionServiceImpl.getDailyComsumpOfCity(FactComsumptionServiceImpl.java:48)
            at com.sanlian.bigdata.ctrl.FactComsumptionController.getComsumpOfCity(FactComsumptionController.java:130)
            at com.sanlian.bigdata.ctrl.FactComsumptionController$$FastClassBySpringCGLIB$$f540f0dc.invoke(<generated>)
            at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
            at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
            at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
            at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
            at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
            at com.sanlian.bigdata.ctrl.FactComsumptionController$$EnhancerBySpringCGLIB$$686410b5.getComsumpOfCity(<generated>)
            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:498)
            at com.guanxin.web.container.ctrl.PlatformController.execute(PlatformController.java:366)
            at com.guanxin.web.container.ctrl.PlatformController.handleRequestInternal(PlatformController.java:263)
            at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
            at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
            at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.PluginsFilter.doFilter(PluginsFilter.java:95)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:19)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.NoCacheFilter.doFilter(NoCacheFilter.java:36)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
            at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
            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)
    09:42:29.048 ERROR (Driver.java                      :263) : Connection error:
    org.postgresql.util.PSQLException: 致命错误: 对不起, 已经有太多的客户 (pgjdbc: autodetected server-encoding to be GB2312, if the message is not readable, please check database logs and/or host, port, dbname, user, password, pg_hba.conf)
            at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473)
            at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205)
            at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
            at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
            at org.postgresql.Driver.makeConnection(Driver.java:452)
            at org.postgresql.Driver.connect(Driver.java:254)
            at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
            at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
            at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)
            at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
            at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
            at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
            at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
            at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106)
            at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:47)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148)
            at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1984)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1914)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1892)
            at org.hibernate.loader.Loader.doQuery(Loader.java:937)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)
            at org.hibernate.loader.Loader.doList(Loader.java:2689)
            at org.hibernate.loader.Loader.doList(Loader.java:2672)
            at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506)
            at org.hibernate.loader.Loader.list(Loader.java:2501)
            at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)
            at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:395)
            at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220)
            at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508)
            at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)
            at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)
            at com.sanlian.bigdata.facade.support.FacadeFunctions.getFactTableListByDateInterval(FacadeFunctions.java:67)
            at com.sanlian.bigdata.facade.impl.FactComsumptionFacadeImpl.getFactComsumptionList(FactComsumptionFacadeImpl.java:39)
            at com.sanlian.bigdata.service.impl.FactComsumptionServiceImpl.lambda$getDailyComsumpOfCity$1(FactComsumptionServiceImpl.java:53)
            at java.util.ArrayList.forEach(ArrayList.java:1249)
            at com.sanlian.bigdata.service.impl.FactComsumptionServiceImpl.getDailyComsumpOfCity(FactComsumptionServiceImpl.java:48)
            at com.sanlian.bigdata.ctrl.FactComsumptionController.getComsumpOfCity(FactComsumptionController.java:130)
            at com.sanlian.bigdata.ctrl.FactComsumptionController$$FastClassBySpringCGLIB$$f540f0dc.invoke(<generated>)
            at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
            at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
            at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
            at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
            at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
            at com.sanlian.bigdata.ctrl.FactComsumptionController$$EnhancerBySpringCGLIB$$686410b5.getComsumpOfCity(<generated>)
            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:498)
            at com.guanxin.web.container.ctrl.PlatformController.execute(PlatformController.java:366)
            at com.guanxin.web.container.ctrl.PlatformController.handleRequestInternal(PlatformController.java:263)
            at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
            at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
            at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.PluginsFilter.doFilter(PluginsFilter.java:95)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:19)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.NoCacheFilter.doFilter(NoCacheFilter.java:36)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
            at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
            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)
    09:42:29.057 WARN  (SqlExceptionHelper.java          :137) : SQL Error: 0, SQLState: 53300
    09:42:29.057 ERROR (SqlExceptionHelper.java          :142) : 致命错误: 对不起, 已经有太多的客户 (pgjdbc: autodetected server-encoding to be GB2312, if the message is not readable, please check database logs and/or host, port, dbname, user, password, pg_hba.conf)
    09:42:29.065 ERROR (DefaultExceptionHandler.java     :56) : org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection
    javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection
            at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
            at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
            at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1514)
            at com.sanlian.bigdata.facade.support.FacadeFunctions.getFactTableListByDateInterval(FacadeFunctions.java:67)
            at com.sanlian.bigdata.facade.impl.FactComsumptionFacadeImpl.getFactComsumptionList(FactComsumptionFacadeImpl.java:39)
            at com.sanlian.bigdata.service.impl.FactComsumptionServiceImpl.lambda$getDailyComsumpOfCity$1(FactComsumptionServiceImpl.java:53)
            at java.util.ArrayList.forEach(ArrayList.java:1249)
            at com.sanlian.bigdata.service.impl.FactComsumptionServiceImpl.getDailyComsumpOfCity(FactComsumptionServiceImpl.java:48)
            at com.sanlian.bigdata.ctrl.FactComsumptionController.getComsumpOfCity(FactComsumptionController.java:130)
            at com.sanlian.bigdata.ctrl.FactComsumptionController$$FastClassBySpringCGLIB$$f540f0dc.invoke(<generated>)
            at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
            at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
            at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
            at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
            at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
            at com.sanlian.bigdata.ctrl.FactComsumptionController$$EnhancerBySpringCGLIB$$686410b5.getComsumpOfCity(<generated>)
            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:498)
            at com.guanxin.web.container.ctrl.PlatformController.execute(PlatformController.java:366)
            at com.guanxin.web.container.ctrl.PlatformController.handleRequestInternal(PlatformController.java:263)
            at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
            at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
            at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.PluginsFilter.doFilter(PluginsFilter.java:95)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:19)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at com.guanxin.web.container.filter.NoCacheFilter.doFilter(NoCacheFilter.java:36)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
            at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
            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)
    Caused by: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection
            at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
            at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
            at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
            at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:109)
            at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:47)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
            at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148)
            at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1984)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1914)
            at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1892)
            at org.hibernate.loader.Loader.doQuery(Loader.java:937)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)
            at org.hibernate.loader.Loader.doList(Loader.java:2689)
            at org.hibernate.loader.Loader.doList(Loader.java:2672)
            at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506)
            at org.hibernate.loader.Loader.list(Loader.java:2501)
            at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)
            at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:395)
            at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220)
            at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508)
            at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)
            at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)
            ... 62 common frames omitted
    Caused by: org.postgresql.util.PSQLException: 致命错误: 对不起, 已经有太多的客户 (pgjdbc: autodetected server-encoding to be GB2312, if the message is not readable, please check database logs and/or host, port, dbname, user, password, pg_hba.conf)
            at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473)
            at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205)
            at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
            at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
            at org.postgresql.Driver.makeConnection(Driver.java:452)
            at org.postgresql.Driver.connect(Driver.java:254)
            at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
            at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
            at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)
            at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
            at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
            at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
            at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
            at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106)
            ... 82 common frames omitted
    View Code

      业务 service 会多次调用 dao 层的方法,session 没有关闭的话,很快就会用尽

    4、测试 getCurrentSession   <--返回目录

        @Override
        public List<FactComsumption> getFactComsumptionList(Integer companyId, Integer merchantId, Integer cityId, String startDate, String endDate) {
            Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();
            List<FactComsumption> list = FacadeFunctions.getFactTableListByDateInterval(session, FactComsumption.class, "FactComsumption", companyId, merchantId, cityId, startDate, endDate);
            // session.close();
            return list;
        }

      

    4.1、报错:Calling method 'createQuery' is not valid without an active transaction (Current status: NOT_ACTIVE)"    <--返回目录

    10:44:13.402 ERROR (DefaultExceptionHandler.java     :56) : Calling method 'createQuery' is not valid without an active transaction (Current status: NOT_ACTIVE)
    org.hibernate.HibernateException: Calling method 'createQuery' is not valid without an active transaction (Current status: NOT_ACTIVE)
            at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:346)
            at com.sun.proxy.$Proxy150.createQuery(Unknown Source)
            at com.sanlian.bigdata.facade.support.FacadeFunctions.getFactTableListByDateInterval(FacadeFunctions.java:55)
            at com.sanlian.bigdata.facade.impl.FactComsumptionFacadeImpl.getFactComsumptionList(FactComsumptionFacadeImpl.java:39)
            at com.sanlian.bigdata.service.impl.FactComsumptionServiceImpl.lambda$getDailyComsumpOfCity$1(FactComsumptionServiceImpl.java:53)
    
           at java.lang.Thread.run(Thread.java:745)

       解决:https://blog.csdn.net/maoyuanming0806/article/details/61417995

    4.2、报错 ERROR (AbstractPlatformTransactionManager.java:905) : Commit exception overridden by rollback exception   <--返回目录

      dao 代码

    @Override
    public Task getByName(String taskName) {
        logger.info("TaskFacadeImpl#getByName");
        Session session = this.getSessionFactory().getCurrentSession();
        Query query = session.createQuery("from Task where task_name=:taskName");
        query.setParameter("taskName", taskName);
        List<Task> taskList = query.list();
        session.close();
        return taskList != null && taskList.size() > 0 ? taskList.get(0) : null;
    }

      service 层都添加了事务,所以不需要手动 session.close()

    参考:

      1)spring管理hibernate的事务(声明注解实现)

      3) 例说Hibernate的openSession和getCurrentSession区别

  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/13176625.html
Copyright © 2020-2023  润新知