java - JPA Query:加入具有分组条件的子查询
问题描述
我有一个表示特定对象的更改事件的实体。就像是:
@Entity
public class Event {
@Id
private String eventId;
private String objectId;
private Instant creationDate;
// other fields, getters, setters
}
一个特定的objectId
.
现在我需要查询 a each 的所有最新事件objectId
(那些最大creationDate
的 groping by objectId
)。
如果是纯 SQL,我会编写以下查询:
SELECT event.*
FROM
event event
JOIN (
SELECT
e.object_id object_id,
MAX(e.creation_date) last_date
FROM event e
GROUP BY e.object_id
) latest_event
ON latest_event.object_id = event.object_id
AND event.creation_date = latest_event.last_date
但不幸的是,类似的连接在 JPA 查询中不起作用。
问题:如何在 JPA 查询中加入子查询?
在我的情况下,使用本机查询不是一个选项,因为我使用带有分页功能的 Spring Data JPA 存储库,这不适用于本机查询。
解决方案
@Query(
value = "SELECT e FROM Event e " +
"WHERE e.creationDate = " +
"(SELECT max(e2.creationDate) FROM Event e2 " +
"WHERE e2.objectId = e.objectId)"
)
推荐阅读
- couchbase - 如何通过 SDK 更新 couchbase 中的数组
- sql-server-2008 - 如何基于逗号分隔的字符串列表创建“联合”
- html - 为什么我在 Mailchimp 中的 html 模板看起来与我在 gmail 桌面/移动设备上收到的不同
- jquery - 如何通过单击按钮将 a 的单元格值通过 ajax 传递给控制器?
- pgadmin-4 - pgAdmin 4 仅显示 2 个选项卡:仪表板和浏览器
- javascript - 如何在 D3.js 中输入数组?
- javascript - 在javascript中使用包含csv数据的数组构建html表
- swift - 如何在元组上定义后缀运算符?
- matlab - 从 Unix 时间 AM 与 PM 中提取
- reactjs - react-alice-carousel 导入样式的问题