SQL クエリは次のとおりです。
select B.* from A inner join B on A.b_id = B.id where A.x in (1,2,3)
A <-> B 関係は多対 1 です
A でフィルタリングする必要がありますが、関連する B を取得します。
アップデート:
このNH QueryOverを試しました
Session.QueryOver<A>.Where(a => a.x.IsIn(array)).JoinQueryOver(a => a.B).Select(a => a.B).List<B>()
最初のクエリは関連する B の ID をフェッチし、他のクエリは関連する B を ID ごとに 1 つずつフェッチします (NHProf を介して分析)。Bのリストを一度に取得したい。
更新 2:
今のところ、サブクエリでこれを回避しました
Session.QueryOver(() => b).WithSubquery.WhereExists(QueryOver.Of<A>().Where(a => a.x.IsIn(array)).And(a => a.b_id == b.id).Select(a => a.id)).List<B>()
ただし、サブクエリは効率が悪いと思う傾向があるため、サブクエリを使用しないQueryOver の例を見たいと思っています。