Znajdowanie elementów z zestawem zawierającym wszystkie elementy danego zestawu za pomocą jpql
Chcę znaleźć przedmioty, które zawierająwszystko podane znaczniki w zestawie znaczników.
Oto uproszczone klasy:
@Entity
class Item {
@ManyToMany
var tags: java.util.Set[Tag] = new java.util.HashSet[Tag]()
}
@Entity
class Tag {
@ManyToMany(mappedBy="tags")
var items: java.util.Set[Item] = new java.util.HashSet[Item]
}
Jeśli spróbuję tak to zrobić
select distinct i
from Item i join i.tags t
where t in (:tags)
Dostaję przedmioty, które zawierająkażdy podanych tagów. Nie jest to zaskakujące, ale chcę rzeczy, które zawierająwszystko podanych tagów. Więc próbuję tego na odwrót:
select distinct i
from Item i join i.tags t
where (:tags) in t
Dostaję komunikat o błędzieorg.hibernate.exception.SQLGrammarException: arguments of row IN must all be row expressions
. Działa, jeślitags
zawiera tylko jeden znacznik, ale nie powiedzie się więcej.
Jak mogę to wyrazić w JPQL?