Hibernate query.list()在第二次尝试时没有响应

时间:2016-11-03 19:23:25

标签: java spring hibernate

我正在开发一个接受并返回JSON数据的REST服务器。对于特定的输入值(来自输入JSON),Hibernate(与Spring集成)查询数据库并将JSON发送回Rest Controller。客户端应用程序设计为超时5秒,用于读取响应,不能更改。

现在问题有时(并非总是如此)Hibernate无法在给定的时间限制内处理数据,因此在客户端收到超时错误。 query.list()之前的记录器工作但未打印下一个记录器。手动运行SQl返回部分秒的数据。所有数据操作逻辑都是用DAOImpl方法编写的,因此其他地方没有循环。由于与代码中提到的sql查询相对应的表是子表,因此我没有看到映射与这些相关的问题。更令人惊讶的是,方法有时会为同一输入返回数据,但在浏览应用程序时稍后调用时会失败

我在网上检查了其他帖子,以便在bean类中使用完整的构造函数并进行延迟加载。在我的情况下,两者都是真的。下面是导致此问题的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();
    }

1 个答案:

答案 0 :(得分:0)

我不得不将hibernate升级到最新版本!这解决了问题!