1

我有一个具有以下属性的表和 Java 实体:

通知

-ID

-范围

-活动

-用户

-创建时间

-readTime (null --> 新消息)

如何使用一条 JPQL 语句获取每个范围和活动的最新通知?由于 JPA(版本 1.0,没有可用的 Criteria API)不支持“SELECT TOP”或语句中的 LIMIT 运算符(仅通过实体管理器(em.setmax...))我找不到解决方案...有没有只用一个 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 回答