调用criteria.List()时烦人的N + 1问题

时间:2011-05-04 16:14:42

标签: nhibernate nhibernate-mapping

在执行带有连接到另一个连接实体的criteria.list时,查看我的N + 1个查询的详细说明。 我现在很无能为力,也许有人会有一个想法。

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

与Pot相关的顺序是多对一的。 (所以不同的订单可以指向相同的Pot)。 订单表有一个“PotId”字段(带有来自Pot表的键)。

Pot是一对一,双向与Cover相关联 - 一方是“一对一”,另一方是“多对一”。 封面表有一个“PotId”字段(带有Pot表中的键)。

我表演时遇到的麻烦: session.CreateCriteria(typeof(Order))。CreateAlias(“pot”,“pot”,JoinType.LeftOuterJoin).List();

我得到的是一个查询获取订单+花盆,然后N查询获取封面(通过cover.PotId)。 尝试这种方式和另一种调整但无济于事。 我认为这可能与“一对一协会没有延迟加载”的问题有关, 但我无法解决它。 有任何想法吗?很乐意提供更多信息。

2 个答案:

答案 0 :(得分:1)

我认为你想在pot和cover之间指定第二个别名/ join(或者在你的映射中急切加载pot - > cover关系)。

在ICriteria上还有一个你可能感兴趣的.SetFetchMode。

答案 1 :(得分:0)

尝试将batch-size实体上的Cover设置为> 1.当它获得第一个Cover时,它应该加载现有Pot实体引用的任何其他实体,最高限度为batch-size