选择实体包含列表的位置,该列表是另一个列表的子集

时间:2011-01-09 09:41:17

标签: jpa jpql

我正在编写JPQL查询,我有以下场景。我有一个Question实体,其中包含一个Tags列表。我想选择包含给定标签列表的所有问题。我如何用JPA做到这一点?

我想做一些像SELECT x FROM问题x WHERE x.tags'包含所有':tags

3 个答案:

答案 0 :(得分:5)

试试这样:

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

答案 1 :(得分:4)

Nayans解决方案对我无效。它选择每个'x',它匹配给定集合':tags'的第一个(或任何?)条目。如果这真的对你有用,你应该再次测试你的申请;)可能是JPA dependend - 我不知道。

提示:尝试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 ;)
    )
)

答案 2 :(得分:3)

[这会搜索任何不是全部;请参考其他正确答案。]

您可以将list设置为参数。

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

还可以尝试使用(:tags),因为它取决于您使用的JPA实现。