返回0零结果的复杂JPQL查询在查询中获取表两次

时间:2018-09-12 15:17:25

标签: mysql hibernate spring-boot spring-data-jpa jpql

我正在开发一个应用程序,在该应用程序中,公交车司机在他们处理的路线上与孩子的父母进行小组聊天。

我希望可以选择在公交车到达的最后一站之前 之前向所有聊天发送消息。

我已经尝试过该查询,但是它总是返回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行的过滤器仅用于其余站位上仅儿童的小组聊天。

我在做什么错?

1 个答案:

答案 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);