当前位置: 首页 > 面试题库 >

JPA和聚合函数。如何使用查询结果?

梁丘璞瑜
2023-03-14
问题内容

我是ORM的新手,我需要一些帮助来理解一些东西。

假设我有以下标准SQL查询:

SELECT *, COUNT(test.testId) AS noTests FROM inspection
LEFT JOIN test ON inspection.inspId = test.inspId
GROUP BY inspection.inspId

我想在JPA中使用。

我有一个与测试实体一对多关系的检验实体。(检查有很多测试)我尝试用JPQL编写此代码

Query query = em.createQuery("SELECT insp, COUNT(???what???) " +
      "FROM Inspection insp LEFT JOIN insp.testList " +  
      "GROUP BY insp.inspId");

1)如何编写COUNT子句?我必须将计数应用于测试表中的元素,但testList是一个集合,所以我不能做这样的事情COUNT(insp.testList.testId)

2)假设解析为1,将返回哪种类型的对象。绝对不是检查对象…如何使用结果?


问题答案:
  1. 您可以为加入的实体提供别名(使用AS
  2. 您可以创建一个新对象,也可以List使用返回值创建一个

所以:

SELECT new com.yourproject.ResultHolder(insp, COUNT(test.testId)) 
    FROM Inspection insp LEFT JOIN  insp.testList AS test GROUP BY insp.inspId

要么

SELECT new list(insp, COUNT(test.testId)) 
    FROM Inspection insp LEFT JOIN  insp.testList AS test GROUP BY insp.inspId

然后,可以将结果作为的实例ResultHolder或作为进行访问java.util.List,其中inspis是list.get(0),count为list.get(1)



 类似资料:
  • 我使用的是Spring数据jpa 1.2,但无论如何我都找不到这样的聚合查询结果。 与原生JPA完美配合 任何我的JPA存储库都是 那么,我如何才能对Spring数据进行聚合查询呢?我在文档中完全找不到任何内容

  • 我有以下JPA实体(getter、setter和非相关字段省略): 我的目标是使用JPQL或criteriaAPI实现查询,它将返回每天的平均事务量和最大事务量。 产生预期结果的原生SQL查询(MySQL数据库)如下所示: 遗憾的是,不鼓励使用本机 SQL 查询,并且 JPQL 不允许在 where 子句中使用子查询。 提前谢谢你。 附加: 我从以下Spring数据查询开始: 但显然没有用: 我可

  • 问题内容: 我想要做的是计算子查询返回的行数,本质上如下: 这是我的错误信息: 为什么这不起作用?如果select仅返回一堆具有过滤条件的行,为什么我不能计算行数或返回的行数? 我正在计算拥有的不同员工的数量。按分组。 这是有关我的数据库的一些结构信息,作为查询的一部分。 谢谢! 问题答案: 试试这个 或这个

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢

  • 我想用JPA编写以下查询,以检索按和分组的指令的计数。我知道以下SQL可以工作: 我想从这个查询中获取结果,并将其映射到一个新的对象调用: 问题所在

  • >[danger] 注意!!! 使用聚合功能时,必须给它一个别名,以便能够从模型中访问它 > 聚合函数的计算,都是排除了 null 值,所以COUNT( id ) 一般推荐用非空的主键来计算 COUNT 计算数量 const { Sequelize } = app; // 查询班级总人数,按照姓名聚合 const ret = await Student.findAll({ attribut