Подтвердить что ты не робот

Выбор, где объект содержит список, который является подмножеством другого списка

Я пишу JPQL-запрос, и у меня есть следующий сценарий. У меня есть объект Question, который содержит список тегов. Я хотел бы выбрать все Вопросы, содержащие данный Список тегов. Как это сделать с помощью JPA?

Я хотел бы сделать что-то вроде SELECT x FROM Question x WHERE x.tags "содержит все ': теги

4b9b3361

Ответ 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 ;)
    )
)