2010-05-26 134 views
7

我是ORM的新手,我需要一些帮助来理解一些东西。JPA和聚合函数。我如何使用查询的结果?

假设我有以下标准的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被解析,将返回什么类型的对象。它绝对不会是一个检查对象...我如何使用结果?

回答

16
  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)

+0

非常感谢你。有用! – Bogdan 2010-05-26 10:06:56