目前,我正在使用Spring 3.2.0,Hibernate 4.2.0.CR1和Oracle 10g的Web应用程序。
Oracle表中的主键是序列生成的,它们都已在Hibernate实体中以Long
类型映射。在实践中,很难有一个没有分页的系统。
我通常使用以下方法从数据库表中的行列表中检索子列表。
sessionFactory.getCurrentSession()
.createQuery("from Entity order by entityId desc")
.setFirstResult(currentPage)
.setMaxResults(pageSize)
.list();
setFirstResult()
和setMaxResults()
方法仅接受int
类型的参数。当然,int
类型对于setMaxResults()
方法来说已经绰绰有余了,但是如果有人在表中有很多行并且他/她需要检索一个子列表,比如50行那么来自,Integer.MAX_VALUE
?
假设给定表中有多个2,147,483,647
行。当然,我可以理解给定值2,147,483,647
是一个很大的数字,但是如果只使用Long
方法,则会出现一个问题,即为什么人们应该使用setFirstResult()
类型作为主键接受int
的类型?我没有看到此方法的任何重载版本,即使使用可以接受int
以外的条件API,实际上很少看到没有分页的系统。