【发布时间】:2011-06-06 00:42:57
【问题描述】:
我正在编写一个 JPQL 查询并且我有以下场景。我有一个包含标签列表的问题实体。我想选择包含给定标签列表的所有问题。我如何使用 JPA 做到这一点?
我想做一些类似 SELECT x FROM Question x WHERE x.tags 'contains all' :tags 的事情
【问题讨论】:
我正在编写一个 JPQL 查询并且我有以下场景。我有一个包含标签列表的问题实体。我想选择包含给定标签列表的所有问题。我如何使用 JPA 做到这一点?
我想做一些类似 SELECT x FROM Question x WHERE x.tags 'contains all' :tags 的事情
【问题讨论】:
[这会搜索 ANY not ALL;请参考其他正确答案。]
您可以将列表设置为参数。
SELECT x FROM Question x WHERE x.tags IN :tags
也可以尝试使用 (:tags),因为它取决于您使用的 JPA 实现。
【讨论】:
试试这样:
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
【讨论】:
Nayans 解决方案对我不起作用。它选择与给定集合':tags'的第一个(或任何?)条目匹配的每个'x'。如果这真的对您有用,您应该再次测试您的应用程序;) 可能依赖于 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 ;)
)
)
【讨论】: