1つのSQLステートメントで実行したいHibernate基準呼び出しがあります。私がやろうとしているのは、外部結合を使用して子をロードしているときに、値の範囲(SQL IN句)のプロパティを持つ子を持つParentのインスタンスを選択することです。これが私がこれまでに持っているものです:
Criteria c = session.createCriteria(Parent.class);
c.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN)
.setFetchMode("c", FetchMode.JOIN)
.add(Restrictions.in("c.property", properties));
c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
return c.list();
サンプルデータは次のとおりです。
Parent
Parent ID
A
B
C
Children
Child ID Parent ID property
... A 0
... A 2
... A 7
... B 1
... C 1
... C 2
... C 3
私がやりたいのは、子の1つが私のバインドパラメータと等しいプロパティを持っている場合、親とそのすべての子を返すことです。プロパティが{2}を含む配列であると仮定しましょう。この場合、呼び出しは親AとCを返しますが、それらの子コレクションには要素2のみが含まれます。つまり、Parent [Children]:
A [2]&C [2]
私が欲しいのは:
A [0、2、7]&C [1、2 3]
これがバグでない場合は、セマンティクスが壊れているようです。A.getChildren()またはC.getChildren()を呼び出して、1つのレコードを返すことが正しいと見なされる方法がわかりません。これは、予測ではありません。つまり、デフォルトのselectフェッチを使用するようにクエリを拡張すると、適切な子コレクションが返され、多数のクエリが返されます。
c.createAlias("children", "c").add(
Restrictions.in("c.property", properties));
これはバグですか?そうでない場合、どうすれば希望の結果を達成できますか?