【发布时间】:2011-02-02 00:22:07
【问题描述】:
在 nHibernate 中,如果您使用“join fetch”执行 HQL 查询以急切地加载子集合,nHibernate 将忽略 SetMaxResults 和 SetFirstResult 并尝试从数据库中检索每个项目。为什么?这种行为是 HQL 特有的,因为 ICriteria 支持急切加载(但使用外连接)和 LIMIT。
这里有更多细节http://www.lesnikowski.com/blog/index.php/nhibernate-ignores-setmaxresults-in-sql/。
进一步讨论该主题以及“join fetch”的其他问题(例如获得笛卡尔积):正如 here 和 here 所指出的,可以使用 HQL 急切地加载子集合和 IC 标准。但是,ICriteria 不允许内部连接(导致笛卡尔积)和 HQL doesn't allow paging 数据库端的结果。
如果一个必须做同样的事情但被分页怎么办?
SetMaxResults,但这可能会导致加载问题。 那时,我可能想要执行两个完全独立的查询,首先只获取实体,然后加载相关的关联。
那么这里的分页有什么问题,可能的解决方案是什么?
【问题讨论】:
标签: nhibernate