特定のマネージャに対して未処理のリクエストをすべて選択したいと考えています。マネージャーは複数のチームを持つことができます。
権限に基づいてさまざまな制限を適用するクエリを作成し、クエリを変更して、行数、存在チェック、サブクエリなどを提供します。
この構成では QueryOver を使用しますが、代わりに ICriteria を使用することもできます。
次のクラスが与えられます。
class Team {
public virtual int Manager { get; set; }
public virtual ISet<int> Members { get; set; }
}
class Request {
public virtual int Owner { get; set; }
public virtual bool IsOutstanding { get; set; }
}
class static SomeRestrictions {
public static void TeamsForManager<TRoot> (this IQueryOver<TRoot, Team> query, int managerId) {
// In reality this is a little more complex
query.Where (x => x.Manager == managerId);
}
}
これは私が試している現在のクエリです (これは機能しません)。
var users = QueryOver.Of<Team> ();
users.TeamsForManager (5)
users.Select (/* not sure */);
var requests = session.QueryOver<Request> ()
.Where (x => x.IsOutstanding)
.WithSubquery.WhereProperty (x => x.Owner).In (users);
ユーザーを選択する HQL は次のようになります。
"SELECT m FROM Team t JOIN t.Members m WHERE <TeamsForManager restrictions>"
しかし、アクセス許可に基づく他の制限で構成できないため、HQL を使用したくありません。また、他のクエリで構成して、行数/存在チェックなどに変換することもできません.