-1

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

我现在尝试在查询中使用“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)

谢谢!

4

2 回答 2

1

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

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

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

于 2012-08-21T12:50:34.750 回答
0

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

于 2012-08-21T18:41:46.763 回答