我想在不使用连接的情况下以多对多关系选择父子集合的主键。由于已从此示例中删除了其他约束,因此查询必须发生在子级别(Tag)而不是父级别(Item)上。
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。
谢谢!