ВЫБРАТЬ с JOIN и SUM в JPQL - PullRequest
0 голосов
/ 26 мая 2020

Я хочу сделать запрос для извлечения информации на панели управления. У меня есть две сущности: Пользователь и Публикация, они связаны между собой. В моем запросе я хочу получить информацию о публикации и количество пользователей по ролу в каждой публикации.

Я пробовал этот запрос, и он работает, но когда есть сообщение без пользователей, это не так. t входит в набор результатов, и это должно быть "| post1 | information | 0 | 0 |".

    @Query("SELECT new com.project.dto.DashboardDTO("
        + "post.title, "
        + "post.information, "
        + "SUM(CASE WHEN u.rol = 0 THEN 1 ELSE 0 END), "
        + "SUM(CASE WHEN u.rol = 1 THEN 1 ELSE 0 END)) "
        + "FROM Post post JOIN post.users u "
        + "GROUP BY post.title, post.information")
   Page<DashboardDTO> getDashboard(Pageable pageable);

Что мне нужно исправить?

1 Ответ

2 голосов
/ 26 мая 2020

Вам нужно использовать left join вместо join, и вы получите желаемый результат.

Также, если вам нужно получить сводные данные для каждого сообщения, вы можете сгруппировать его по сообщению id вместо (title, information), потому что оба они функционально зависят от id. Запрос будет таким:

@Query("SELECT new com.project.dto.DashboardDTO("
        + "post.title, "
        + "post.information, "
        + "SUM(CASE WHEN u.rol = 0 THEN 1 ELSE 0 END), "
        + "SUM(CASE WHEN u.rol = 1 THEN 1 ELSE 0 END)) "
        + "FROM Post post LEFT JOIN post.users u "
        + "GROUP BY post")
Page<DashboardDTO> getDashboard(Pageable pageable);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...