2

属性 (Map< MyClass, Integer >) として Map を持つ Java クラス (BigClass と呼びましょう) があります。このマップの値に応じてこのクラスをフィルター処理する HQL クエリを作成したいと考えています。

実際、私がやりたいことは、MyClass b.map.get(m) > 0 の特定のインスタンス (m) を満たす BigClass のすべてのインスタンス (b) を回復することです。

例: マップに < m, 2 > のようなエントリがある場合は BigClass のインスタンスを復元したいが、マップに < m, 0 > のようなエントリがある場合は BigClass のインスタンスを復元したくないまたは m がマップ キーに属していない場合。

私は検索してきましたが、私の問題に関連するこの投稿を見つけました:

HQL を使用してマップの値をクエリする

しかし、それは私に解決策を与えませんでした。


これらは、私が試してきたいくつかのクエリです。

org.hibernate.QueryException: No index value! 
[SELECT e FROM BigClass e WHERE ( map[(SELECT b FROM MyClass b WHERE b.id = ?)] > 0) ]

org.hibernate.QueryException: No index value! 
[SELECT e FROM BigClass e WHERE ( index(map) = (SELECT b FROM MyClass b WHERE b.id = ?) ) > 0) ]

前もって感謝します...

4

2 に答える 2

0

答えてくれてありがとう。かっこの間の SELECT を削除することでこれを解決しましたが、禁止されていました!

オブジェクトをクエリのパラメーターとして追加しただけで、これは機能しました。

于 2012-10-29T15:24:15.277 に答える
0

基準がオプションの場合、これは機能する可能性があります

session.createCriteria(BigClass.class)
    .joinAlias("map", "entry")
    .add(Restrictions.eq("entry", session.load(MyClass.class, id))
    .list();
于 2012-10-26T11:44:49.043 に答える