1

次の架空のレイアウトを想定

ディーラー
  たくさんの車があります
     メーカーがあります

名前がXのディーラーを取得し、Carsコレクションも取得するというクエリを作成しますが、そうする場合はメーカーに対して結合を使用します。これにはICriteriaの使用が必要になると思います。こんなことを考えています。


var dealershipQuery = Session.CreateCriteria< Dealership>("d")
                             .Add(Restrictions.InsenstiveLike("d.Name", "Foo"))
                             .CreateAlias("d.Cars", "c")
                             .SetFetchMode("d.Cars", FetchMode.Select)
                             .SetFetchMode("c.Manufacturer", FetchMode.Join)
                             .UniqueResult< Dealership>();

しかし、結果のクエリは、私が期待していたようには見えません。DetachedCriteriaがどこかで必要になるかもしれないと思い始めていますが、よくわかりません。

考え?

4

1 に答える 1

3

同じクエリでコレクションを取得することが最善の解決策になることはほとんどありません。

最良のアプローチの1つは、このリンクで詳しく説明されています:http: //ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx

個人的にはbatch-size、コレクションとエンティティの両方で、デフォルトのページ長のサイズに設定して使用することをお勧めします。そうすれば、上記のクエリは、高価なクエリではなく、3つの安価で個別にキャッシュ可能なクエリで実行されます。

于 2010-06-11T01:02:43.307 に答える