JPA 查询:加入具有分组条件的子查询

我有一个代表特定对象的更改事件的实体。就像是:


@Entity

public class Event {

    @Id

    private String eventId;

    private String objectId;

    private Instant creationDate;

    // other fields, getters, setters

}

一个特定的可能有多个事件对象objectId。


现在我需要查询 eachobjectId(那些具有最大creationDategroping 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 存储库,该功能不适用于本机查询。


侃侃无极
浏览 315回答 2
2回答

森林海

@Query(     value = "SELECT e FROM Event e " +             "WHERE e.creationDate = " +            "(SELECT max(e2.creationDate) FROM Event e2 " +             "WHERE e2.objectId = e.objectId)")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java