Выбор, где объект содержит список, который является подмножеством другого списка
Я пишу JPQL-запрос, и у меня есть следующий сценарий. У меня есть объект Question, который содержит список тегов. Я хотел бы выбрать все Вопросы, содержащие данный Список тегов. Как это сделать с помощью JPA?
Я хотел бы сделать что-то вроде SELECT x FROM Question x WHERE x.tags "содержит все ': теги
Ответы
Ответ 1
[Это ищет ЛЮБОЕ НЕ ВСЕ; см. другие правильные ответы.]
Вы можете установить список в качестве параметра.
SELECT x FROM Question x WHERE x.tags IN :tags
Также попробуйте использовать (: теги), так как это зависит от используемой вами реализации JPA.
Ответ 2
Попробуйте вот так:
select distinct q from Question q join q.tags as t
where t.name in (:tags)
group by q.id, q.author, q.title, q.content,q.postedAt
having count(t.id) = :size
Ответ 3
Решение Nayans не работает для меня. Он выбирает каждый "х", который соответствует первой (или любой?) Записи данной коллекции: теги ". Если это действительно сработало для вас, вы должны снова проверить свое приложение;) Возможно, это зависит от JPA - я не знаю.
Совет. Попробуйте Krzysztofs решение или использовать мой:
SELECT x FROM Question x
WHERE x IN (
SELECT y FROM Question y
INNER JOIN y.tags yt
WHERE yt IN (
:tags
)
GROUP BY y
HAVING COUNT( DISTINCT yt) = (
:tagsSize // should be clear ;)
)
)