我正在尝试在 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)
谢谢!
不确定为什么它对您不起作用,但我们在 Oracle 11 上成功使用了 SetFirstResult 和 SetMaxResult。这是我们的代码,与您的非常相似:
criteria.SetFirstResult(pageSize * Offset);
criteria.SetMaxResults(pageSize);
我从来没有注意到任何问题。你检查过hibernate创建的sql语句吗?
我已经使用 Oracle 和 NHibernate 几年了,除了一些极端情况外,从来没有遇到过分页问题。 SetFirstResult 和 SetMaxResults 有效。 您可以使用 NHibernate Profiler http://www.nhprof.org 并查看实际创建的 sql。 这可能对你有帮助