gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:49 25 4
gpt4 key购买 nike

我是 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被resolved,返回什么类型的对象。肯定不会是 Inspection 对象。。。结果怎么用?

最佳答案

  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 访问,其中 insplist.get(0),计数为list.get(1)

关于java - JPA 和聚合函数。如何使用查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com