我想查找包含所有項目的標籤集合中給定的標籤。使用jpql查找包含給定集合的所有元素的集合的項目
這裏是簡化類:
@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]
}
如果我試圖像這樣
select distinct i
from Item i join i.tags t
where t in (:tags)
我得到包含特定標記的任何的項目。這並不奇怪,但我想要的項目包含全部的給定標籤。所以我反過來試試:
select distinct i
from Item i join i.tags t
where (:tags) in t
我收到錯誤信息org.hibernate.exception.SQLGrammarException: arguments of row IN must all be row expressions
。它可以工作,如果tags
只包含一個標籤,但它失敗的不止於此。
如何在JPQL中表達這一點?
因爲我覺得你不能在hibernate中與其他數組進行比較。我認爲你必須重寫你的sql查詢代碼。 –
Query query = session.createQuery(「from Stock where stockId in(:code)」); query.setParameterList(「code」,idList); –
我很欣賞你在你的問題中展示瞭如何獲得包含任何給定標籤的物品!這就是我正在尋找的東西。我可以確認它也適用於'@ ElementCollection's。 –