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();
}