Запрос фильтра JPQL (поиск записей, которые не содержат в списке элемент с указанным c id) - PullRequest
0 голосов
/ 08 мая 2020

Добрый день, я пытаюсь сделать правильный запрос для выборки данных, но, видимо, я чего-то не знаю ((

Мне нужно отобразить пользователей, которые не входят в команды проекта с заданным id

Мой запрос частично работает: он фильтрует пользователей, но если пользователь находится в другой команде другого проекта, то условие не выполняется ((

@Query("select distinct u from User u " +
        "left join u.userTeams uTeams " +
        "where u.userTeams is empty or uTeams.teamProject.projectId <> :projectId")
List<User> findAllNotAddedToProject(@Param("projectId") Long project);

Скриншот показывает, что у пользователя две команды с разными проектами, поэтому мне не нужно искать этого пользователя, потому что одна из команд назначена проекту, а вторая нет (запрос находит ее второй командой)

enter image description here

Схема моей базы данных:

enter image description here

1 Ответ

0 голосов
/ 09 мая 2020

Используйте что-то вроде следующего

@Query("select u from User u where not exists (" +
        "select 1 from Team t join t.users sub " +
        "where sub.id = u.id empty and t.teamProject.projectId = :projectId)")
List<User> findAllNotAddedToProject(@Param("projectId") Long project);
...