2012-03-14 33 views
0

我有一個消息列表,其中列出了我的列ID,FROM_ID,TO_ID,DATEMESSAGE,並定義了常用的實體bean。我試圖寫一個查詢,在給定的收件人(又名TO_ID)返回來自每個用戶的最新消息(即對於每個唯一的FROM_ID,返回記錄的最大DATE)。如何在HQL中使用GROUP BY時返回對象?

我想出了查詢:

SELECT       
    m.id, m.fromId, m.toId, m.message, max(m.sharedDate), 
FROM        
    Messages m      
WHERE        
    m.toId = ?   
GROUP BY       
    m.fromId  

現在,我可以把這些列背部和填充他們豆,但有沒有辦法有休眠辦呢?

回答

1

包裹在構造呼叫所選擇的列:

select new WrapperBean(m.id, m.fromId, m.toId, m.message, max(m.sharedDate))...

其中WrapperBean具有與那些ARGS的構造函數。

+0

嗯,問題是,在我的真實情況下(即,而不是問題中提供的簡化版本)有兩個不同的類(共享一個基類)持久化到該表,結果可能是 – ArtB 2012-03-14 20:11:34

+0

可能有一些簡單的方法來做到這一點,但手動技術將包括鑑別器列(或其他一些會區分這些類型的值),並自己遍歷Object [],並創建正確的類型在那個價值上。 – dlgrasse 2012-03-14 20:23:03

+0

有沒有辦法引用鑑別器列,如果它沒有映射到任何實體bean?顯然,存在:'特殊屬性類在多態持久性的情況下訪問實例的鑑別器值。嵌入在where子句中的Java類名將被轉換爲其鑑別符值.'如同'cat cat where Cat.class = DomesticCat' – ArtB 2012-03-14 20:37:03