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

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

Я хотел бы сделать что-то вроде SELECT x FROM Вопрос x ГДЕ x.tags «содержит все»: tags

Ответы [ 3 ]

5 голосов
/ 26 февраля 2012

Попробуй так:

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
4 голосов
/ 13 февраля 2014

Nayans решение не работает для меня.Он выбирает каждую 'x', которая соответствует первой (или любой?) Записи в данной коллекции ': tags'.Если это действительно сработало для вас, вам следует снова протестировать ваше приложение;) может быть, это зависит от 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 ;)
    )
)
3 голосов
/ 10 января 2011

[Это ищет ЛЮБОЙ, а не ВСЕ;Пожалуйста, обратитесь к другим правильным ответам.]

Вы можете установить список в качестве параметра.

SELECT x FROM Question x WHERE x.tags IN :tags

Также попробуйте использовать (: теги), так как это зависит от используемой вами реализации JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...