次のようなオブジェクト階層があるとします。
class Category
{
List<SubCategory> SubCategories;
}
class SubCategory
{
List<Product> Products;
}
class Product
{
}
NHibernate を使用して階層全体を熱心にロードすることは可能ですか? 1 つのクエリを実行して、サブカテゴリと製品を熱心にロードしたすべてのカテゴリをロードしたいと考えています。
次のようなオブジェクト階層があるとします。
class Category
{
List<SubCategory> SubCategories;
}
class SubCategory
{
List<Product> Products;
}
class Product
{
}
NHibernate を使用して階層全体を熱心にロードすることは可能ですか? 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 を少し試してみる必要があります。