我正在寫一個JPQL查詢,我有以下情形。我有一個包含標籤列表的問題實體。我想選擇包含給定標籤列表的所有問題。我如何用JPA做到這一點?選擇實體包含列表是哪個列表是另一個列表的子集
我想這樣做SELECT X的問題x,其中x.tags「包含了所有」:標籤
我正在寫一個JPQL查詢,我有以下情形。我有一個包含標籤列表的問題實體。我想選擇包含給定標籤列表的所有問題。我如何用JPA做到這一點?選擇實體包含列表是哪個列表是另一個列表的子集
我想這樣做SELECT X的問題x,其中x.tags「包含了所有」:標籤
[這個搜索所有不是所有;請參考其他正確答案。]
您可以設置列表作爲參數。
SELECT x FROM Question x WHERE x.tags IN :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 ;)
)
)
我會在短時間內進行測試。我知道它是有效的,如果我檢查一個標籤是否在標籤列表中。但是現在我的情況涉及測試一個標籤列表是否是另一個標籤列表的子集。 – joshua 2011-01-10 09:07:50
解決方案是什麼? – Phil 2011-10-15 14:48:13
是的。那工作。 – joshua 2012-02-27 09:38:34