タグセットに指定されたすべてのタグを含むアイテムを見つけたいです。
単純化されたクラスは次のとおりです。
@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
。タグが 1 つしか含まれていない場合tags
は機能しますが、それ以上の場合は失敗します。
これをJPQLでどのように表現できますか?