I am writing a JPQL query and i have the following scenario. I have a Question entity which contains a list of Tags. I would like to select all Questions that contains a given List of tags. How do i do this with JPA?
I would like to do something like SELECT x FROM Question x WHERE x.tags 'contains all' :tags
preguntado el 09 de enero de 11 a las 09:01
[This searches for ANY not ALL; please refer other correct answers.]
You can set list as a parameter.
SELECT x FROM Question x WHERE x.tags IN :tags
Also try using (:tags), as it depends on the JPA implementation you are using.
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 solution does'nt work for me. Its selecting every 'x' which matches the first (or any?) entry of the given collection ':tags'. If this really worked for you, you should test you application again ;) might be JPA dependend - I don't know.
Sugerencia: prueba Krzysztofs solution or use mine:
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 ;) ) )