2012-11-28 94 views
1

我有一個大的數據庫,我需要做一個查詢,至少加入3個表。問題是這個查詢的結果集不是一個實體類。JPA Hibernate轉換爲非實體類

查詢:

SELECT avg(g.grade) avgGrade, max(g.grade) maxGrade, min(g.grade) minGrade FROM... 

新類:

class Stat { 
    float avgGrade; 
    float maxGrade; 
    float minGrade; 

    // constructor + getters and setters 
} 

現在我需要從查詢中獲取三個值。我怎樣才能做到這一點?

回答

0

您有兩個選擇(我想有更多的,但是這兩個應該是最常見的一種),首先使用方式拿煙Wadekar表明,它通過構造構造數據對象。

第二個只是選擇你想要的字段,而Hibernate會返回給你一個元組列表。列表中的每個元素都是Object [],表示結果的一個「行」。你可以自行實現從元組到你的Stat類的轉換。

+0

我可以使用entitymanager與第二選擇? – ceptrus

+0

我可以使用entitymanager還是我必須使用hibernate會話對象? – ceptrus

+0

我相信它也可以與JPA EM一起工作(我還沒有試過證明這一點,只是通過我的裸存) –

1

您可以使用構造函數表達式嘗試下面的查詢,相應地修改它。

SELECT NEW package_name.Stat(AVG(g.grade),最大值(g.grade),分鐘(g.grade)) FROM ...

+0

但它適用於本機SQL嗎?或者必須是JPQL或HQL? – ceptrus

+0

@ceptrus它與JPQL,HQL –

0

假設類統計有適當的構造

select new your_pkg_name.Stat(avg(g.grade) as avgGrade, max(g.grade) as maxGrade, min(g.grade) as minGrade) FROM ... 
+0

一起使用然後我該如何獲取對象?我必須做演員? Stat stat =(Stat)em.createQuery(hql).getSingleResult(); – ceptrus

0

我發現這個問題,avg(g.grade)返回一個double,我的類Stat的構造函數接受一個float,所以我有一個與未找到構造函數異常有關的錯誤。

感謝所有:)