Nhibernate 讨厌的N+;调用criteria.List()时出现1个问题

Nhibernate 讨厌的N+;调用criteria.List()时出现1个问题,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,请参阅我的N+1查询的详细说明,该查询在执行criteria.list时与另一个关联实体关联。 我现在还不太清楚,也许有人会有主意的 这些是对象:(正确重命名:) 订单->锅盖 订单是与Pot关联的多对一订单。(因此不同的订单可以指向同一个罐)。 订单表有一个“PotId”字段(带有Pot表中的键) 锅是一对一的,双向关联到盖子-一边是“一对一”,另一边是“多对一”。 封面表格有一个“PotId”字段(带有Pot表格中的键) 当我执行以下操作时,麻烦就开始了: CreateCriteria(ty

请参阅我的N+1查询的详细说明,该查询在执行criteria.list时与另一个关联实体关联。 我现在还不太清楚,也许有人会有主意的

这些是对象:(正确重命名:) 订单->锅盖

订单是与Pot关联的多对一订单。(因此不同的订单可以指向同一个罐)。 订单表有一个“PotId”字段(带有Pot表中的键)

锅是一对一的,双向关联到盖子-一边是“一对一”,另一边是“多对一”。 封面表格有一个“PotId”字段(带有Pot表格中的键)

当我执行以下操作时,麻烦就开始了: CreateCriteria(typeof(Order)).CreateAlias(“pot”,“pot”,JoinType.LeftOuterJoin).List()

我得到的是单个查询获取订单+pots,然后N个查询获取cover(按cover.PotId)。 尝试过以这种方式和另一种方式进行调整,但均无效。 我认为这可能与“一对一关联无延迟加载”问题有关, 但我绕不开它。
有什么想法吗?将很乐意提供更多信息。

尝试将
封面
实体上的
批量
设置为something>1。当它获取第一个
Cover
时,它应该加载现有
Pot
实体引用的任何其他实体,最大限制为
批量大小

我认为您需要在Pot和Cover之间指定第二个别名/联接(或者在映射中急于加载Pot->Cover关系)


ICriteria上还有一个.SetFetchMode,您可能会对此感兴趣。

我考虑过提前获取适当的封面,但查询是动态生成的,这使得它更加困难。我还考虑过急切地加载pot->cover关系,但在现实生活中的示例中,Order也指向pot(多对一),并且我在同一个表上有两个连接,但我仍然看到在这个查询之后加载了一些实体(非常奇怪,不确定为什么)。我也使用过SetFetchMode(和另一个CreateCriteria),但我看到的结果或多或少是相同的……我可以尝试一下,但我更喜欢O(1)DB往返和O(1)查询的解决方案。