2

クエリの1つを最適化することに行き詰まりました...これが私のシナリオです...

Twitterに似たドメインがあり、ユーザーは他のユーザーをフォローできます。これが私のユーザーモデルのサンプルです:

User
 -> Followers (many-to-many users)
 -> Following (many-to-many users)

ここで、ユーザー「XYZ」をフォローしているユーザーのページ結果を返す必要がありますが、現在ログインしているユーザーが返されたフォロワーをフォローしているかどうかを判断するために必要な熱心なロードデータも必要です。

だからどういうわけか私はこれを熱心にロードする必要があります:(おそらく現在のユーザーuser->followers->followingのデータをフェッチするためのフィルターを使用して)following

これは1つのクエリで実行することも可能ですか、それとも2つの個別のクエリを実行する必要がありますか?フォロワーのページデータを返す1つのクエリ、次に返されたIDを持つIN句を指定する別のクエリで、ログインしているユーザーの次のデータをフェッチします。

ポール

4

1 に答える 1

1

データを取得するには 2 つのクエリが必要ですが、NHibernate Futures メソッドを使用して、1 回のトリップで両方のクエリを実行できます。

あなたのシナリオでは、次のようなことをします

var user = Session.CreateCriteria<User>()
                    .SetFetchMode("Followers", FethMode.Eager)
                    .Add(Restrictions.Eq("Id", userId)
                    .FutureValue<User>();

Session.CreateCriteria<User>()
                    .SetFetchMode("Following", FethMode.Eager)
                    .Add(Restrictions.Eq("Id", userId)
                    .FutureValue<User>();
于 2011-05-19T22:23:06.107 に答える