2010-05-26 180 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

相關問題