JPQL:获取最新项目

时间:2012-06-18 12:04:48

标签: jpa jpql

我有一个包含这些属性的表和Java实体:

  

通知

     

-Id

     

-scope

     

-activity

     

-user

     

-creationTime

     

-readTime(null - >新消息)

如何使用一个JPQL语句获取每个范围和活动的最新通知? 由于JPA(版本1.0,没有Criteria API可用)在语句中不支持“SELECT TOP”或LIMIT运算符(仅在实体管理器(em.setmax ...)上),我找不到解决方案...... 有没有办法只用一个JPQL语句来完成这个任务? 使用本机SQL获取LIMIT或TOP是没有解决方案......

示例:

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

1 个答案:

答案 0 :(得分: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);

要从此查询(将是对象数组)检索结果,请参阅here