1

次のようなオブジェクト階層があるとします。

class Category
{
    List<SubCategory> SubCategories;
}

class SubCategory
{
    List<Product> Products;
}

class Product
{
}

NHibernate を使用して階層全体を熱心にロードすることは可能ですか? 1 つのクエリを実行して、サブカテゴリと製品を熱心にロードしたすべてのカテゴリをロードしたいと考えています。

4

1 に答える 1

1

はい、可能です...しかし、これはパフォーマンスに影響を与えると思いませんか? 膨大な量のデータを取得できる可能性があります。

そのためには、インスタンスの取得に使用する ICriteria の「SetFetchMode」メソッドを使用する必要があります。

このようなもの:

ICriteria crit = session.CreateCriteria (typeof(Category));

crit.SetFetchMode ("SubCategories", FetchMode.Eager);

または、おそらく CreateAlias を使用して:

ICriteria crit = session.CreateCriteria (typeof(Category));

crit.CreateAlias ("SubCategories", "sc", JoinType.LeftOuterJoin);
crit.CreateAlias ("sc.Products", "p", JoinType.InnerJoin);

おそらく、状況や必要に応じて、可能な JoinTypes を少し試してみる必要があります。

于 2009-03-17T11:45:40.850 に答える