すべてタグを含むアイテムを見つけたいと思います。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
に1つのタグだけが含まれていても動作しますが、それ以上のエラーで失敗します。
JPQLでこれをどのように表現できますか?
select i from Item i join i.tags t
where t in :tags group by i.id having count(i.id) = :tagCount
私はあなたがSQLクエリコードを書き直す必要がありますと思います。 –
クエリークエリー= session.createQuery( "from stockId:stockId in:(in::code)"); query.setParameterList( "code"、idList); –
あなたはあなたの質問で、どのように指定されたタグのいずれかを含むアイテムを得る方法を示してくれてありがとう!これは私が探していたものです。 '@ ElementCollection'でも動作することが確認できます。 –