zoukankan      html  css  js  c++  java
  • Hibernate 一次查询分多次返回 避免内存溢出

        public void grpcGpioDevice(StreamObserver<NI_GetAllDeviceListResponse> responseObserver,
                Map<String, VsGrpc> vcuMap) {
            Session session = null;
            final StringBuffer sb = new StringBuffer("select name,vs_id,"
                    + "description,direction,device_id,vx_external_id from EMS_GPIO_DEVICE ");
            try {
                session = getSession();
                Query query = session.createSQLQuery(sb.toString()).setFetchSize(grpcRspNumber);
                ScrollableResults results =  query.scroll();
                List<GpioDevice> gpioList = new ArrayList<>();
                
                while(results.next()) {
                    Object[] obj = results.get();
                    GpioDevice gd = new GpioDevice();
                    gd.setName(obj[0] == null ?"":obj[0].toString());
                    gd.setVsId(obj[1] == null ?"":obj[1].toString());
                    gd.setDescription(obj[2] == null ?"":obj[2].toString());
                    gd.setDirection(obj[3] == null ?0:Integer.parseInt(obj[3].toString()));
                    gd.setDeviceId(obj[4] == null ?"":obj[4].toString());
                    gd.setVxExternalId(obj[5] == null ?"":obj[5].toString());
                    gpioList.add(gd);
                    if(gpioList.size()==grpcRspNumber) {
                        NI_GetAllDeviceListResponse.Builder response = NI_GetAllDeviceListResponse.newBuilder();
                        grpcFlowResult.getAiAoDiDoInfo(null, gpioList, vcuMap, "DIDO", response);
                        grpcFlowResult.result(response, responseObserver);
                        gpioList.clear();
                    }
                }
                if(gpioList.size()>0 && gpioList.size()<grpcRspNumber) {
                    NI_GetAllDeviceListResponse.Builder response = NI_GetAllDeviceListResponse.newBuilder();
                    grpcFlowResult.getAiAoDiDoInfo(null, gpioList, vcuMap, "DIDO", response);
                    grpcFlowResult.result(response, responseObserver);
                    gpioList.clear();
                }
            }catch (RuntimeException e) {
                e.printStackTrace();
              } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                releaseSession(session);
            }
        }
    View Code
  • 相关阅读:
    为什么switch里的case没有break不行
    CLS的探索:Python如何让日志免费云化
    做一次“黑客“,入侵一次自己的服务器
    斥资288买了三年服务器之后应该如何配置
    Scrapy入门到放弃01:开启爬虫2.0时代
    c#自制抽奖小程序
    c#中的几种Dialog
    解决数据库排序空值排在前问题
    Oracle 数据库添加定时事件
    FileReader 对象实现图片预览
  • 原文地址:https://www.cnblogs.com/acme6/p/10514918.html
Copyright © 2011-2022 走看看