在执行带有连接到另一个连接实体的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)。 尝试这种方式和另一种调整但无济于事。 我认为这可能与“一对一协会没有延迟加载”的问题有关, 但我无法解决它。 有任何想法吗?很乐意提供更多信息。
答案 0 :(得分:1)
我认为你想在pot和cover之间指定第二个别名/ join(或者在你的映射中急切加载pot - > cover关系)。
在ICriteria上还有一个你可能感兴趣的.SetFetchMode。
答案 1 :(得分:0)
尝试将batch-size
实体上的Cover
设置为> 1.当它获得第一个Cover
时,它应该加载现有Pot
实体引用的任何其他实体,最高限度为batch-size
。