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

Bog*_*dan 10 java sql jpa

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

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

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

我想在JPA中使用它.

我有一个与Test实体有一对多关系的Inspection实体.(检查有很多测试)我试过在JPQL中写这个:

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

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

2)假设1已解决,将返回什么类型的对象.它肯定不是检验对象......我如何使用结果?

Boz*_*zho 17

  1. 您可以为已连接的实体提供别名(with 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
Run Code Online (Sandbox Code Playgroud)

要么

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

结果是随后无论是作为一个实例可访问的ResultHolder,或者作为一个java.util.List,其中insplist.get(0),并且计数是list.get(1)