0

カテゴリ タイプとアイテム タイプがあり、その間に双方向の多対多の関係があります。この関係の両側は怠惰です。HQL または ICriteria で、次のことを行うクエリを作成したいと考えています。 カテゴリの ID を指定して、そのすべてのアイテムを、それらのアイテムのカテゴリ コレクションと共に (積極的に読み込みます) 読み込みます。そのようなクエリはどのようになりますか?

私は限りました:

session.CreateQuery( "from Category c left join fetch c.Items where c.ID = :cid" )
        .SetParameter( "cid", ofCategory.ID )
        .List();

しかし、各項目の Categories コレクションを熱心にロードする部分に収まる方法がわかりません。

すでに NHibernateUtil.Initialize() を使用して動作していることに注意してください。ただし、教育上の理由から、別の方法を試してみたいと思います。おそらく、よりエレガントな方法です。そのため、現在、関連する Item とカテゴリのインスタンスで最初に ISession.Lock() を呼び出してから、次のように機能しています。

foreach ( Item i in ofCategory.Items ) {
if ( !NHibernateUtil.IsInitialized(i.Categories) )
    NHibernateUtil.Initialize( i.Categories );
}
4

1 に答える 1

0

stackoverflow の別の回答で、熱心なフェッチと熱心な読み込みの違いについては既に説明しました。私の知る限り、何らかの方法でコレクションにアクセスするか、NHibernateUtil.

最も洗練された方法は、コレクションや参照を明示的にロードする必要のないアプリケーションを作成する場合です。遅延読み込みは、ビジネス ロジックに対して透過的である必要があります。

于 2011-08-08T13:45:05.367 に答える