JSONデータを受け入れて返すRESTサーバーで作業しています。特定の入力値(入力JSONから)の場合、Hibernate(Springと統合)はデータベースにクエリを行い、JSONをRest Controllerに返します。クライアントアプリケーションは、応答を読み取るために、変更できないタイムアウトが5秒になるように設計されています。2回目の試行でHibernate query.list()が応答しない
この問題は、(常にそうとは限りませんが)Hibernateが指定された制限時間内にデータを処理できないため、クライアント側でタイムアウトエラーが発生することがあります。 query.list()の直前のロガーは動作しましたが、次のロガーは出力されませんでした。 SQlを手動で実行すると、秒単位でデータが返されました。すべてのデータ操作ロジックはDAOImplメソッドで記述されているため、別の場所にループはありません。したがって、コードで言及されているSQLクエリに対応するテーブルは子テーブルであるため、これらのマッピング関連の問題は表示されません。さらに驚いたことに、メソッドは同じ入力のデータを返しますが、アプリケーションをブラウズしているときに後で呼び出されると失敗します。
beanのクラスで完全なコンストラクタを使用し、遅延読み込みを行うためにネット上の他のポストでチェックしました。私の場合はどちらも当てはまります。以下は、この問題を引き起こすDAOImplメソッドの1つです。ここでは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();
}