Chcę znaleźć elementy, które zawierają wszystkie podanych znaczników w ich zestawie znaczników.Znajdowanie pozycji z zestawem zawierającym wszystkie elementy danego zestawu z jpql
Oto uproszczone klas:
@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]
}
Gdy próbuję go jak ten
select distinct i
from Item i join i.tags t
where t in (:tags)
uzyskać pozycje, które zawierają żadnego z podanych tagów. Nie jest to zaskakujące, ale chcę, aby Elementy zawierały dane znaczników. Więc staram mu odwrót:
select distinct i
from Item i join i.tags t
where (:tags) in t
dostaję komunikat o błędzie org.hibernate.exception.SQLGrammarException: arguments of row IN must all be row expressions
. Działa, jeśli tags
zawiera tylko jeden tag, ale kończy się niepowodzeniem.
Jak mogę wyrazić to w JPQL?
Bo myślę, że nie można porównać zestawu z inną tablicą w stanie hibernacji. Myślę, że musisz napisać ponownie kod zapytania SQL. –
Zapytanie kwerendy = session.createQuery ("from Stock where stockId in (: code)"); query.setParameterList ("code", idList); –
Rozumiem, że w swoim pytaniu pokazałeś, jak zdobyć przedmioty, które zawierają któryś z podanych tagów! Tego właśnie szukałem. Mogę potwierdzić, że działa również z elementami @ ElementCollection. –