我正在编写JPQL查询,我有以下场景。我有一个Question实体,其中包含一个Tags列表。我想选择包含给定标签列表的所有问题。我如何用JPA做到这一点?
我想做一些像SELECT x FROM问题x WHERE x.tags'包含所有':tags
答案 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实现。