首页 > 解决方案 > 在 JPA 规范的子查询中使用 group by

问题描述

有两种模型:Event& Session,它具有一对多的关系。

我想基于这样的 SQL 使用 JPA Criteria API 创建谓词:

SELECT event.* FROM events JOIN (
    SELECT event.id, MIN(session.start) AS start FROM 
        events JOIN sessions ON events.id = sessions.event_id 
        GROUP BY event.id
    ) TMP on events.id = TMP.id 
    WHERE start >= '2018-08-01 00:00:00';

我参考这个链接:http ://www.thejavageek.com/2014/04/28/criteria-group-clause/通过子查询构建组。

但是由于SubQuery没有multiselect功能而卡住了,如何通过子查询基于组构建谓词?

标签: jpaspring-data-jpaspring-data

解决方案


尝试如下查询,使用函数和子句in的聚合日期和条件minhaving

select event from Event event 
and event.session.start in 
    (select min(nestedEvent.session.start) minDates
        FROM Event nestedEvent
    group by nestedEvent.id
    having minDates >= '2018-08-01 00:00:00') 

推荐阅读