在nHibernate中,如果您通过“join fetch”执行HQL查询以加载子集合,nHibernate将忽略SetMaxResults和SetFirstResult,并尝试从数据库中检索每个项目的。为什么?这种行为是特定于HQL的,因为ICriteria支持急切的加载(尽管有外连接)和LIMIT。为什么nHibernate在进行“连接读取”时不支持LIMIT?
这里有更多的细节http://www.lesnikowski.com/blog/index.php/nhibernate-ignores-setmaxresults-in-sql/。
进一步的主题,关于与“连接抓取”(如获取笛卡尔乘积的结果)等问题:如指出here和here,可以热切负载子集合既HQL和的ICriteria。然而,ICriteria不允许内部连接(产生笛卡尔积),而DB边的结果是HQL doesn't allow paging。
和如果必须做同样的事情,但分页怎么办?
SetMaxResults,但这可能会导致加载问题。 在这一点上,我可能想要执行两个完全独立的查询,首先得到实体,然后加载相关的关联。
那么在这里分页的问题是什么,以及可能的解决方案是什么?