我正在开发一个应用程序,在该应用程序中,公交车司机在他们处理的路线上与孩子的父母进行小组聊天。
我希望可以选择在公交车到达的最后一站之前 之前向所有聊天发送消息。
我已经尝试过该查询,但是它总是返回0个结果。肯定应该返回至少一个。
1 | @Query("select g from GroupChat g " +
2 | "join g.route r " +
3 | "join r.bus b " +
4 | "join b.mostRecentStop mrs " +
5 | "join r.stops s " +
6 | "join s.children c " +
7 | "where r.routeId = :routeId " +
8 | "and s.stopTime <= mrs.stopTime " +
9 | "and g.childId = c.childId ")
10|Set<GroupChat> getAllGroupChatsOnRouteForPreviousStops(@Param("routeId") short routeId);
GroupChats PK是routeId-childId
第2行获取与群组聊天关联的路线。
3号线提取该路线的公交车。
4号线提取公交车最近到达的车站。
5号线提取路线上的所有停靠点
第6行提取路线上的所有子代(即每个站点的每个子代)
第7行过滤器仅用于查询的路由。
第8行过滤器用于最近一次停止之前的停止
第9行的过滤器仅用于其余站位上仅儿童的小组聊天。
我在做什么错?
答案 0 :(得分:1)
由于这涉及到JPQL中的复杂查询,因此最好使用本机查询。
@Query(value="select g from GroupChat g
join g.route r
join r.bus b
join b.mostRecentStop
join r.stops s
join s.children c
where r.routeId = :routeId
and s.stopTime <= mrs.stopTime
and g.childId = c.childId",
nativeQuery=true
)
Set<GroupChat> getAllGroupChatsOnRouteForPreviousStops(@Param("routeId") short routeId);