2009-03-06 7 views
2

私は今、私がクエリを定義するために休止状態を使用するレポートアプリケーションでしばらくの間働いています。しかし、ユースケースを報告するためには、これが最善の方法ではないという気持ちがますます高まっています。グループごとの上位nのような複雑なクエリにhibernateを使う最良の方法

1)クエリは部分列になります。したがって、型指定されたオブジェクトは検索されません(javaですべてのフィールドをキャストしない限り)。 2)SQLまたはhqlに直接アクセスせずにクエリを表現するのは難しいです。

私の現在の問題は、1グループあたりのトップNを取得したいということです。たとえば、グループ内の要素ごとに最後の5日間など、毎日訪問者の数を表示します。

結果は次のようになります。

| RowName | 1-1-2009 | 2-1-2009 | 3-1-2009 | 4-1-2009 | 5-1-2009 
| SomeName| 1  | 42  | 34  | 32  | 35 

このような出力に行ごとに日ごとに保存されたデータを変換するための最善のアプローチは何ですか?それは通常のSQLに戻って、型の指定されていないデータで作業する時間ですか?

私は実際に結果に型付きオブジェクトを使用したいと思いますが、Javaではそれを行うのがかなり難しくなります。どんな提案も歓迎です!

答えて

1

基準APIを使用して、あなたはこれを行うことができます。

Session session = ...; 
Criteria criteria = session.createCriteria(MyClass.class); 
criteria.setFirstResult(1); 
criteria.setMaxResults(5); 
... any other criteria ... 
List topFive = criteria.list(); 

はバニラSQLでこれを行うには(と、Hibernateはあなたが期待するものをやっていることを確認する)this SO postをチェックアウト:

+2

これはトップ確かです私の質問で明白に言及されているように、グループごとではありません。 – TomHastjarjanto

+0

あなたの例から、データの行が日付であるかどうかは不明ですし、集計を列にピボットしていますか?そうであれば、ProjectionListと 'sum' Projectionを使ってHibernateで総和を行い、アプリケーションでピボットを実行できます。 –

関連する問題