1

これらの属性を持つテーブルとJavaエンティティがあります。

通知

-Id

-範囲

-アクティビティ

-ユーザー

-creationTime

-readTime(null->新しいメッセージ)

1つのJPQLステートメントでスコープおよびアクティビティごとに最新の通知を取得するにはどうすればよいですか?JPA(バージョン1.0、利用可能なCriteria APIなし)はステートメント内の「SELECTTOP」またはLIMIT演算子をサポートしていないため(エンティティマネージャー(em.setmax…)のみ)解決策が見つかりません…ありますか1つのJPQLステートメントだけでこのタスクを実行する方法は?ネイティブSQLを使用してLIMITを取得するか、TOPは解決策ではありません…</ p>

例:

Notification 1
-Id:1
-scope:test
-activity:1
-user:user1
-cTime: 01.01.1999

Notification 2
-Id:2
-scope:test
-activity:1
-user:user1
-cTime: 02.02.2000


Notification 3
-Id:3
-scope:dev
-activity:2
-user:user1
-cTime: 01.01.1997

これは再実行する必要があります:通知2および3

4

1 に答える 1

0

以下のクエリを試すことができ、それに応じてフィールドの順序を変更できます。

//-- MAX_RESULT_SIZE is the number of results to be fetched
entityManager.createQuery("SELECT n.scope, n.activity, MAX(n.Id) FROM Notification n GROUP BY n.scope, n.activity ORDER BY n.cTime DESC").setMaxResults(MAX_RESULT_SIZE);

オブジェクト配列になるこのクエリからの結果の取得については、こちらを参照してください。

于 2012-06-18T12:55:55.907 に答える