結合を使用せずに、多対多の関係で親の子コレクションの主キーを選択したいと考えています。この例から削除された他の制約により、クエリは親レベル (アイテム) ではなく子レベル (タグ) で発生する必要があります。
Item item = null;
Tag tag = null;
var qoTags = QueryOver.Of<Tag>(() => tag)
.JoinQueryOver(x => x.Items, () => item)
.Select(Projections.Group<Item>(() => item.ItemId));
生成する
SELECT Item.ItemId
FROM Tag
inner join ItemsTags on Tag.TagId = ItemsTags.TagId
inner join Item on ItemsTags.ItemId = Item.ItemId
GROUP BY Item.ItemId
しかし、理想的には、生成される SQL は次のようになります。
SELECT ItemsTags.ItemId
FROM Tag
inner join ItemsTags on Tag.TagId = ItemsTags.TagId
GROUP BY ItemsTags.ItemId
不要な結合が削除され、'group by' 句と 'select' 句がジャンクション テーブルの ID を参照していることに注意してください。
ありがとう!