我有一个包含这些属性的表和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
答案 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。