Я работаю над приложением, где водители автобусов имеют групповые чаты с родителями детей на маршрутах, которые они обрабатывают.
Я хочу иметь возможность отправлять сообщение во все чаты до последней остановки, на которой прибыл автобус.
Я пробовал этот запрос, но он всегда возвращает 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 только для групповых чатов для детей только на оставшихся остановках.
Что я делаю неправильно?
Поскольку это связано с сложным запросом в 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);
spring.jpa.show-sql = true
в application.properties. Теперь выполните этот запрос. Теперь вы сможете выполнять SQL-запросы в журнале приложений. Перейти к терминалу SQL и выполнить то же самое, заменив?
со значениемrouteId
. Отладка запроса построчно с этого момента.