当前位置: 首页 > 知识库问答 >
问题:

Hibernate JPA CriteriaQuery与计数和位置谓词

后焕
2023-03-14

我试图用一个CriteriaQuery在JPA/Hibernate中复制这个查询的结果。

select count(*) from tbl_survey where CREATED_DATE > to_date('2020-04-01', 'yyyy-mm-dd') 

daysBack值作为参数传入。

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, daysBack);
    Date daysAgo = cal.getTime();
    try {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<Long> cq = cb.createQuery(Long.class);
        Root<Survey> root = cq.from(Survey.class);
        Path<Date> dateCreated = root.<Date>get("createdDate");
        Predicate datePredicate = cb.greaterThanOrEqualTo(dateCreated, daysAgo);
        cq.where(datePredicate);
        cq.select(cb.count(cq.from(Survey.class)));

        long count = entityManager.createQuery(cq).getSingleResult();
        JSONObject resultJson = new JSONObject();
        resultJson.put(SURVEY_COUNT, count);

        logger.info("Count for Survey table is: {}", count);
        return new ResponseEntity<>(resultJson.toString(), HttpStatus.OK);
    } catch (Exception e) {
        logger.error(e.getLocalizedMessage(), e);
        return new ResponseEntity(e.getLocalizedMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }

日志输出为:测量表的计数为:36

然而,表中只有6行,这向我表明正在生成某种自连接或交叉积来创建36的输出。我应该做什么不同的事情来获得正确的计数?

共有1个答案

令狐新翰
2023-03-14

使用新根的这一行会发生自连接

cq.select(cb.count(cq.from(Survey.class)));

用于where条件和计数查询的根不同,这导致了自联接。对计数查询也使用相同的根

cq.select(cb.count(root)); 
 类似资料:
  • 在我的应用程序中,我通过单击按钮将FusedLocationProviderClient的坐标存储到数据库中。问题是,当我重新启动手机或模拟器时,为空,我必须再次单击我订购的按钮才能使其工作。如果是否为空? 在我的按钮处理程序中,我调用,并使用纬度、经度和精度存储到数据库中。 任何帮助赞赏!

  • 问题内容: 使用Java 8,我得到以下代码的编译器错误: 因此,基本上,编译器会说“我知道您会返回,但您不应该返回,如果不知道,我不确定使用哪种方法”,而不是“哦,您将返回,您必须指代该方法的版本” ?如何产生这种混乱? 我知道(如果它们有一个通用的Type),但事实并非如此。 我确实知道如何解决它;如果我这样做很好 但我很好奇是什么原因造成的。 问题答案: 为了清楚起见,可以对此进行一些简化:

  • 问题内容: 除了通常的“保持计数器”方法以外,还有什么快速的方法可以计算BitSet中设置的位数? 问题答案: 该基数()方法返回集合的位的数目。

  • 我为表格中的线条得到的y坐标似乎超出了文本的坐标。似乎正在进行一些转换,但我找不到它。如果可能的话,我想在下面扩展的PDFGraphicsStreamEngine范围内解决这个问题,而不必回到绘图板上使用PDFBox中可用的其他输入流。 我扩展了,以获取页面上每个文本图示符的位置: 我已经扩展了来提取页面上的每一行作为: 我编写了一个简单的程序来演示这个问题: 这项研究的结果是: 文本列表中的最后

  • 我有一个练习,找出出了什么问题。我会感激的帮助:) 编写将具有两个int类型数组和更大的返回数组(如果两个数组中的一个更大)以及与数组相同位置的元素的总和的代码。

  • 这样我就能得到 我意识到我最初并没有指定这一点,但是是否可以在保留类型注释的同时做到这一点呢?到目前为止,最重要的答案是使用一个装饰器--但是,它并不保留返回类型