【问题标题】:NHibernate SQLquery for paging to HQL / ICriteriaNHibernate SQL 查询用于分页到 HQL / Criteria
【发布时间】:2010-06-30 12:15:11
【问题描述】:

我正在做一个查询,根据 row_number() 对 X 行进行排序并返回 我正在将 NHibernate 与 MSSQL 一起使用,我正在尝试使用 CreateSQLQuery 进行分页,我有这个查询:

select s.*   

from(

select distinct release.[stop], survey.SurveyId, survey.Created, survey.CopyOfId, survey.DesignTemplateId, survey.UserId, survey.Template, [Row] = Row_Number() over (order by survey.[SurveyId])

from    Survey               as survey
inner join  Release              as release  on release.SurveyId   = survey.SurveyId

group by    survey.SurveyId
,           survey.Created
,           survey.CopyOfId
,           survey.DesignTemplateId
,           survey.UserId
,           survey.Template
,   release.[stop]

) as s

where s.[Row] >= 0 and s.[Row] <= 20
order by s.[stop]

有谁知道如何使用 HQL 或 ICriteria(甚至更好)而不是普通的 SQL 来完成这项工作?这样做的原因是我想要一个与 SQLite 和 MS SQL Server 2005 兼容的查询,这样我就可以使用 .SetMaxResult() og .SetFirstResult()

提前致谢!

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate hql icriteria


    【解决方案1】:

    尽量避免在 nHibernate 中使用纯 SQL。

    在 Criteria 对象上,使用 SetFirstResult() 和 SetMaxResult() 进行分页。

    10 条记录的页面?第一页是criteria.SetFirstResult(0).SetMaxResult(10),第三页是criteria.SetFirstResult(20).SetMaxResult(10)

    始终使用正确的方言。例如,SQL Server 2008 比 SQL Server 2005 具有更多的分页功能。

    【讨论】:

    • 您还可以使用 MultiCriteria 进行第二次查询,计算同一往返的总计数,以获取总页数。
    • 感谢您的回答,但我想知道这个查询在 HQL 中或使用 ICriteria 时会是什么样子
    • 同理,你也可以在查询对象上调用这些方法。
    • 嗨,皮埃尔,感谢您的评论。这不一样,这就是我问这个问题的原因。我想知道构建与上述相同的底层 SQL 查询需要什么确切的 HQL 查询或 ICriteria 方法链系列。我知道如果我使用 HQL 或 ICriteria 构建上述 SQL,我会得到 SetFirstResult()SetMaxResult() 方法,但我无法将 SQL 转换为 HQL 或 ICriteria,这就是我首先问这个问题的原因地点。
    • 您使用的是哪个版本的 nHibernate?我刚刚测试了两种方法都有surcombe.com/nhibernate-1.2/api/html/…
    【解决方案2】:

    这是一篇很棒的文章,可以做你想做的事 http://www.tobinharris.com/past/2008/10/20/almost-iqueryable-with-nhibernate-hql/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多