2016-11-03 3 views
0

JSON 데이터를 받아들이고 반환하는 REST 서버에서 작업하고있다. 특정 입력 값 (입력 JSON에서)에 대해 Hibernate (Spring과 통합 됨)는 데이터베이스를 쿼리하고 Rest Controller로 JSON을 다시 보냅니다. 클라이언트 응용 프로그램은 응답을 읽기 위해 변경 될 수없는 5 초의 제한 시간을 갖도록 설계되었습니다.Hibernate query.list()가 두 번째 시도에서 응답하지 않는다

이제 때때로 (항상은 아니지만) 대부분의 경우 Hibernate는 주어진 제한 시간 내에 데이터를 처리 할 수 ​​없으므로 클라이언트 측에서 시간 초과 오류가 수신됩니다. query.list() 직전의 로거가 작동했지만 다음 로거가 인쇄되지 않았습니다. SQl을 수동으로 실행하면 초 단위로 데이터가 반환됩니다. 모든 데이터 조작 논리는 DAOImpl 방법으로 작성되므로 다른 곳에서는 루프가 없습니다. 따라서 테이블에서 SQL 쿼리에 해당하는 자식 테이블을 언급했기 때문에 나는 이것들과 연관된 문제를 매핑하지 않습니다. 좀 더 놀랍게도, 메소드는 때때로 동일한 입력에 대해 데이터를 반환하지만 나중에 애플리케이션을 탐색 할 때 호출 할 때 실패합니다.

bean 클래스에서 전체 생성자를 사용하고 지연로드를 사용하려면 net의 다른 게시물을 확인했습니다. 제 경우에는 둘 다 사실입니다. 아래는이 문제를 일으키는 DAOImpl 메소드 중 하나입니다. 여기에 2 테이블 (각 테이블에 약 20 개의 항목이 많은 데이터가 없음)을 쿼리하고 모든 데이터를 json 배열에 추가 한 다음 다시 보내야합니다.

@Override 
     public String getOfferOnRuleNameBalance(String inputJsonString) { 
     JSONObject saveJsonObject = new JSONObject(inputJsonString); 
     String ruleName = saveJsonObject.getString("rulename"); 
     int currentAccountBalance = saveJsonObject.getInt("currentAccountBalance"); 
     Session session1 = getSession(); 
     Criteria criteria =session1.createCriteria(PaymentPlanOffers.class); 
     criteria.add(Restrictions.eq("rulename", ruleName)); 
     @SuppressWarnings("unchecked") 
     List<PaymentPlanOffers> offerList=criteria.list(); 
     JSONArray jsonArray = new JSONArray(); 
     for(PaymentPlanOffers object:offerList) 
     { 
      JSONObject jsonObject1 =new JSONObject(); 
      jsonObject1.put("instAmount",object.getAmountPercent()); 
      jsonObject1.put("instNumber", object.getNumInstallment()); 
      jsonObject1.put("frequency", object.getFrequency()); 
      jsonObject1.put("offerId", object.getId()); 
      jsonObject1.put("offerName", object.getOfferName()); 
      jsonObject1.put("active", object.isActive()); 
      jsonObject1.put("accepted", object.isAccepted()); 
      jsonObject1.put("totalAmount", currentAccountBalance); 
      jsonObject1.put("startDate", object.getStartDate()); 
      jsonObject1.put("endDate", object.getEndDate()); 
      jsonArray.put(jsonObject1); 
     } 

     Criteria criteria2 =session1.createCriteria(CustomPlanOffer.class); 
     criteria2.add(Restrictions.eq("rulename", ruleName)); 
     @SuppressWarnings("unchecked") 
     List<CustomPlanOffer> customOfferList=criteria2.list(); 
     for(CustomPlanOffer object:customOfferList) 
     { 
      JSONObject jsonObject1 =new JSONObject(); 
      jsonObject1.put("instAmount", object.getAvgInstallment()); 
      jsonObject1.put("instNumber", object.getNumOfInstallment()); 
      jsonObject1.put("frequency", object.getFrequency()); 
      jsonObject1.put("offerId", object.getId()); 
      jsonObject1.put("offerName", object.getName()); 
      jsonObject1.put("active", object.isActive()); 
      jsonObject1.put("accepted", object.isAccepted()); 
      jsonObject1.put("totalAmount", object.getTotalPaymentAmount()); 
      jsonObject1.put("startDate", object.getStartDate()); 
      jsonObject1.put("endDate", object.getEndDate()); 
      jsonArray.put(jsonObject1); 
     } 

     JSONObject mainObj = new JSONObject(); 
     mainObj.put("allOffers", jsonArray); 
     session1.close(); 
     return mainObj.toString(); 
    } 

답변

0

최대 절전 모드를 최신 버전으로 업그레이드해야했습니다! 그게 문제를 해결 했어!

관련 문제