Oracle 中的 NHibernate 分页 - 使用 rownum

问题描述 投票:0回答:2

我正在尝试在 Oracle DB 上的 NHibernate 中进行分页。然而,SetFirstResult 和 SetMaxResults 不起作用,即使在 NHibernate 3.3 中也是如此(其不可预测并且通常返回零结果)。

我现在尝试在查询中使用“rownum”来执行相同的操作。我试过这个:

  finalCriteria
  .Add(Restrictions.Between(Projections.SqlProjection("rownum", new string[] { "RowNumber" }, new IType[] { NHibernateUtil.Int64 }), rowIndex, rowIndex + pageSize));

但是它不起作用(ORA-00936:找不到表达式)

有什么建议吗?

这是我徒劳地使用的方法之一,SetFirst & SetMax

finalCriteria.SetFirstResults(pageIndex* pageSize).SetMaxResults(pageSize)

谢谢!

c# pagination nhibernate oracle-database
2个回答
1
投票

不确定为什么它对您不起作用,但我们在 Oracle 11 上成功使用了 SetFirstResult 和 SetMaxResult。这是我们的代码,与您的非常相似:

criteria.SetFirstResult(pageSize * Offset);
criteria.SetMaxResults(pageSize);

我从来没有注意到任何问题。你检查过hibernate创建的sql语句吗?


0
投票

我已经使用 Oracle 和 NHibernate 几年了,除了一些极端情况外,从来没有遇到过分页问题。 SetFirstResult 和 SetMaxResults 有效。 您可以使用 NHibernate Profiler http://www.nhprof.org 并查看实际创建的 sql。 这可能对你有帮助

© www.soinside.com 2019 - 2024. All rights reserved.