首页 > 解决方案 > 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 存储库,这不适用于本机查询。

标签: javasqlspring-data-jpahqljpql

解决方案


@Query( 
    value = "SELECT e FROM Event e " + 
            "WHERE e.creationDate = " +
            "(SELECT max(e2.creationDate) FROM Event e2 " + 
            "WHERE e2.objectId = e.objectId)"
)

推荐阅读