这一段代码循环套循环套查询,导致查询效率慢,怎么优化?各路大神帮帮忙

if(targets!=null && targets.size() > 0){
targetVO = null;
targetVOs = null;
targetVOs = new ArrayList();
List tasks = workflowService.getTaskList(userId,new String[]{"jixiao","jixiaopinggu"});
for(PerformanceTarget target : targets){
targetVO = new PerformanceTargetVO();

                targetVO.setCode(target.getCode());
                targetVO.setCreateDate(target.getCreateDate());
                targetVO.setId(target.getId());
                targetVO.setStatus(target.getStatus());
                targetVO.setSubject(target.getSubject());
                targetVO.setType(target.getType());
                targetVO.setUpdateDate(target.getUpdateDate());
                targetVO.setUser(target.getUser());
                targetVO.setYear(target.getYear());
                targetVO.setNextAuditer(target.getNextAuditer());

                PerformanceEvaluation evaluation = performanceEstimateService.findByPerformanceEvaluationByTargetId(target.getId());
                boolean isFlag = false; 

                if(evaluation!=null){
                    for(Task task : tasks){
                        String key = workflowService.getBusinessKey(task);
                        if(key.equals(evaluation.getPerformanceEvaluationCode())){
                            String perforHql = " from PerformanceEvaluation  where performanceEvaluationCode = "
                                    + key + " order by createDate desc";

                            List<PerformanceEvaluation> list = performanceEstimateService.findByHql(perforHql);
                            if (list != null && list.size() > 0) {  
                                if(task.getName().equals(Constants.EMPLOYEE_CONFIRM)){
                                    isFlag = true;
                                }
                            }
                        }

                    }   
                    if(!"".equals(evaluation.getBossScoreLevel()) && evaluation.getBossScoreLevel()!=null){
                        targetVO.setEvaluationTitle(evaluation.getBossScoreLevel());//设置评分等级
                    }else{
                        if(isFlag){
                            targetVO.setEvaluationTitle(evaluation.getManagerScoreLevel());
                        }
                    }

                    targetVO.setEvalStatus(evaluation.getStatus());//设置评估状态

                    //取得评估待审批人
                    if(evaluation.getPendUser()!=null && !"".equals(evaluation.getPendUser())){

                        String userNames = "";
                        String userIdStr = evaluation.getPendUser();
                        String[] userIds = userIdStr.split(",");

                        if(evaluation.getUserId()!=null&&evaluation.getStatus()!=Constants.EVALUATION_APPEAL){

                            User user = null;
                            for(int i = 0;i < userIds.length; i++){
                                user = userService.findById(Integer.parseInt(userIds[i]));

                                if(i==userIds.length-1){
                                    userNames+=user.getName();
                                }else{
                                    userNames+=user.getName()+",";
                                }
                            }
                            targetVO.setNextPGAuditer(userNames);

// userNames = getDepartmentManager(String.valueOf(evaluation.getUserId()), Constants.APPLY_PERFORM_PERSONAL);
}else if(evaluation.getUserId()!=null&&evaluation.getStatus()-Constants.EVALUATION_APPEAL==0){
userNames = getUserRoleService.getUserNameByJob(Constants.SXYYG);
}

                        targetVO.setNextPGAuditer(userNames);
                    }
                }


                targetVOs.add(targetVO);
            }


            if(targetVOs!=null && targetVOs.size() > 0){
                if(currentMenu != null){
                    targetVOs = getpageSize(targetVOs,currentMenu);
                }else{
                    targetVOs = getpageSize(targetVOs,null);
                }
            }else{
                targetVOs = getpageSize(targetVOs,null);
            }
        }else{
            targetVO = null;
            targetVOs = null;
            targetVOs = getpageSize(targetVOs,null);
        }