Hibernate分页:ScrollableResult与setMaxResult()+ setFirstResult()

时间:2012-04-25 13:12:40

标签: java hibernate

我一直在使用ORM框架,但我对Hibernate很新。

假设您有一个查询(无论是查询还是标准,无关紧要),它会检索一个很棒的结果集,并且您希望通过它进行分页。您更愿意使用setMaxResult()和setFirstResult()方法组合,还是使用ScrollableResult?

关于性能(执行时间和内存消耗)的哪种方法最好?

2 个答案:

答案 0 :(得分:2)

如果您实现的Web应用程序在单独的请求 - 响应周期中提供单独的结果页面,那么您无法使用ScrollableResult获得任何优势。使用setFirst / Max / Result。但是,这可能是一个真正的性能杀手,具体取决于确切的查询和结果的总大小。特别是如果穷人db必须每次都对整个结果集进行排序,那么它就可以计算出100-110的记录。

答案 1 :(得分:1)

我们前几天遇到了同样的问题,并为setMaxResult(..)setFirstResult(..)确定了问题。问题是两个:

    如果您的jdbc驱动程序或数据库没有正确处理它,
  • ScrollableResult可能会对next()的每次调用执行一个查询。我们就是这种情况(MySQL)
  • 它是特定于休眠的,而不是JPA标准。