2011-08-08 10 views
2

ロード時に2つのエンティティ間で動的にローディング戦略を設定する方法はありますか? エンティティのリストを持つParentエンティティがある場合、いくつかの状況では遅延読み込みされた子で「親」エンティティを読み込み、他のエンティティでは読み込みが必要な場合があります。動的にnhibernateを使用して負荷を軽減/熱心にする方法

これを行う方法はありますか?マッピングは、その一方または他方を暗示しているようです。

答えて

8

はい、遅延読み込みを使用するようエンティティをデフォルトに設定し、読み込みを熱心にしたい場合は、クエリを変更し、子どもが熱心に読み込まれるように指定します。

実際に読み込みをどのように実装するかは、使用しているクエリスタイルによって異なります。 (すなわちLinq2NH、基準、HQL)

を例えば、Linq2NHと私はそれがこのようなものだと信じて:あなたは

が好き

をフェッチ使用するHQLで

session.Query<Parent>().Fetch(p => p.Child)... 

これは:

from Parent as p left join fetch p.Child... 

、最後にCriteria APIを使用すると、次のようなことが起こります。

var criteria = context.Session.CreateCriteria<Parent>(); 
criteria.SetFetchMode("Child", NHibernate.FetchMode.Eager); 
.... 
関連する問題