2009-03-17 6 views
1

は、次のようなオブジェクト階層を考える:NHibernateで2つの1対多のリレーションシップを使用することができますか?

class Category 
{ 
    List<SubCategory> SubCategories; 
} 

class SubCategory 
{ 
    List<Product> Products; 
} 

class Product 
{ 
} 

それはNHibernateはを使用して、階層全体が熱心に負荷することは可能ですか? 1つのクエリを実行して、すべてのカテゴリにサブカテゴリをロードし、積極的にロードしたいと思っています。

+0

これには解決策がありましたか? – Amitabh

答えて

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でビットを再生する必要があるでしょう、あなたの状況に応じて/何をあなたに欲しいです。

関連する問題