Сложный JPQL-запрос, возвращающий 0 нулевых результатов. - PullRequest
0 голосов
/ 12 сентября 2018

Я работаю над приложением, в котором у водителей автобусов есть групповые чаты с родителями детей на маршрутах, которые они обрабатывают.

Я хочу иметь возможность отправлять сообщения всем чатам до последняя остановка автобуса.

Я пробовал этот запрос, но он всегда возвращает 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 фильтрует только групповые чаты только для детей на оставшихся остановках.

Что я делаю не так?

1 Ответ

0 голосов
/ 13 сентября 2018

Поскольку в 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);
...