java sql注解 JPA和聚合函数。 如何使用查询的结果?



spring data jpa返回自定义对象 (1)

我是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子句? 我必须应用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 ,其中insplist.get(0) ,count为list.get(1)





jpa