nhibernate - 如何在 NHibernate 中使用左连接查询实现分页

标签 nhibernate sql-server-2008 hql

我有一个 NHibernate 查询,如下所示:

        var query = Session.CreateQuery(@"
              select o
              from Order o
                left join o.Products p
              where
                (o.CompanyId = :companyId) AND
                (p.Status = :processing)
              order by o.UpdatedOn desc")
              .SetParameter("companyId", companyId)
              .SetParameter("processing", Status.Processing)
              .SetResultTransformer(Transformers.DistinctRootEntity);

        var data = query.List<Order>();

我想为此查询实现分页,因此我只返回 x 行而不是整个结果集。

我知道 SetMaxResults()SetFirstResult(),但是因为 left joinDistinctRootEntity ,可能会返回少于 x 个订单。

我也尝试了“select different o”,但是为此生成的sql(使用sqlserver 2008方言)似乎忽略了之后页面的distinct第一个(我认为 this 是问题所在)。

实现这一目标的最佳方法是什么?

最佳答案

在这些情况下,最好在两个查询中执行此操作,而不是一次:

  1. 加载订单页面,没有连接
  2. 使用 in 运算符加载这些订单及其产品

http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx 有一个稍微复杂的示例

关于nhibernate - 如何在 NHibernate 中使用左连接查询实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526817/

相关文章:

sql-server-2008 - 如何验证SQL Server 2008 R2中的SQL语法?

c# - 将表单名称转换为c#.net中的表单对象

java - 如何在 Hibernate 批量更新查询中使用日期对象

c# - Linq + NHibernate:准备生产了吗?

c# - 如何构建可扩展的数据模型

NHibernate AND'ing 动态分离

mysql - Hibernate 3 null异常,join fetch查询

oracle - Fluent Nhibernate Oracle 标识符太长 - 别名问题

c# - 将数据库从 SQL Server 2005 更改为 SQL Server 2008

hibernate - 在 Grails 中使用 Hibernate HQL 命名查询?