Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java criteria API谓词:在一列上分组,在另一列上查找行min,然后返回第三行_Java_Hibernate_Jpa_Criteria_Criteria Api - Fatal编程技术网

Java criteria API谓词:在一列上分组,在另一列上查找行min,然后返回第三行

Java criteria API谓词:在一列上分组,在另一列上查找行min,然后返回第三行,java,hibernate,jpa,criteria,criteria-api,Java,Hibernate,Jpa,Criteria,Criteria Api,我有一张桌子 创建表stp2\U vehicles.can\U数据 id bigserial不为空, 接收时间时间戳不为空, gps\u帧\u id int8空 ; 在此基础上,我需要添加更大查询所需的条件谓词。 在这里,我需要的是选择返回can_数据的id-每个gps帧只有一个id,即具有最早时间戳的id 因此,在sql中,它将如下所示: 选择cd.id 来自stp2_vehicles.can_数据cd 右连接 选择gps\u帧\u id,最小接收时间作为最小时间 来自stp2_vehicle

我有一张桌子

创建表stp2\U vehicles.can\U数据 id bigserial不为空, 接收时间时间戳不为空, gps\u帧\u id int8空 ; 在此基础上,我需要添加更大查询所需的条件谓词。 在这里,我需要的是选择返回can_数据的id-每个gps帧只有一个id,即具有最早时间戳的id

因此,在sql中,它将如下所示:

选择cd.id 来自stp2_vehicles.can_数据cd 右连接 选择gps\u帧\u id,最小接收时间作为最小时间 来自stp2_vehicles.can_数据 按gps\u帧\u id分组 cd.gps\帧\ id=cd2.gps\帧\ id和cd.receive\ U time=cd2.min\时间 ; 不幸的是,CriteriaAPI不支持与子查询的结果连接

我也尝试过使用criteria api支持的自连接方法,但我提供的解决方案在计算上似乎太复杂,或者有错误,我看不出来:

选择cd.id 来自stp2_vehicles.can_数据cd 内部连接stp2\U车辆。can\U数据cd2在cd上。id=cd2.id 其中cd.receive_time=从stp2_vehicles.can_data cd3中选择minreceive_time,其中cd.gps_frame_id=cd3.gps_frame_id; 顺便说一下: 我设法解决了更简单的问题:

按cd.gps\U帧\U id从can\U数据cd组中选择mincd.id CriteriaQuery CriteriaQueryCanada=cb.createQueryCanada.class; Subquery Subquery=criteriaQueryCanData.subqueryLong.class; 根CanDataSubcoot=subquery.fromCANData.class; 子查询 .selectcb.leastcandaustabroot.getCANData\uuu.ID .groupBycanDataSubRoot.getCANData.GPS\u帧;
由于子查询似乎是静态的,因此可以使用@Subselect注释为子查询的结果定义一个实体