2012-03-14 7 views
0

通常のエンティティBeanを定義して、カラムがどこにあるのかわかります。IDFROM_IDTO_IDDATE、およびMESSAGEというテーブルがあります。私は、受信者(別名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  

、私は戻ってそれらの列を取り、それらと豆を取り込むことができますが、Hibernateはそれを行う持つ方法はありますか?

答えて

1

コンストラクタ呼び出しで選択した列を折り返す:

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

WrapperBeanは、これらの引数を持つコンストラクタを持っています。

+0

ええ、実際の状況(質問に表示される単純化バージョンの代わりに)では、そのテーブルに永続化される2つの異なるクラス(基本クラスを共有する)があり、その結果が – ArtB

+0

これを行うにはいくらか滑らかな方法があるかもしれませんが、手作業のテクニックでは、discriminatorカラム(またはタイプを区別するその他の値)を入れ、Object []を繰り返し処理し、正しいタイプベースその価値に – dlgrasse

+0

は、エンティティBeanのいずれにもマッピングされていない場合、識別子の列を参照する方法はありますか?明らかに、次のようなものがあります: '特殊なプロパティクラスは、多態的な永続性の場合にインスタンスの識別子値にアクセスします。 'where' from 'cat cat where cat.class = DomesticCat' – ArtB

関連する問題