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

qacovj5a  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(258)

我正在开发一个应用程序,在这个应用程序中,公交车司机可以和孩子的父母在他们处理的路线上进行集体聊天。
我想有一个选项,在公共汽车到达最后一站之前向所有聊天室发送消息。
我尝试过这个查询,但它总是返回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行获取与groupchat关联的路由。
3号线乘那条路的公共汽车。
4号线是公共汽车最近到达的车站。
5号线到达路线上的所有站点
第6行接收路线上的所有孩子(即每个站的每个孩子)
第7行只对查询的路线进行筛选。
第8行过滤最近一次停车前的停车
第9行只对剩余站点上的独生子女进行群聊筛选。
我做错什么了?

i34xakig

i34xakig1#

因为这涉及到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);

相关问题