使用hibernate会话API进行分页的策略

时间:2016-06-06 06:02:50

标签: java database hibernate session javafx

我想知道在java中使用hibernate session api进行分页的最佳策略(性能)是什么。

  Criteria criteria = session.createCriteria(Employee.class);
  criteria.setFirstResult((pageNumber - 1) * pageSize);
  criteria.setMaxResults(pageSize);

  List<Employee> employees = (List<Employee>) criteria.list();

但是当我更改页面时,这真的很慢,因为hibernate会进行全表扫描,以便找到正确的开始数据集。

我正在开发的应用程序是在JAVAFX中编写的,我需要为分页功能提供数据集的数量(以显示正确的页数)。我是这样做的:

 return (Number) session.createCriteria("Book").setProjection(Projections.rowCount()).uniqueResult();

在我阅读的几个主题中,我将必须加载所有数据集:

 session.createCriteria("Book").list();

但我确实拥有超过1.000.000个数据集(并且数量会增加)。我认为选择所有数据集不是一个好主意。

我考虑过从所有数据集中选择ID列,并在更改页面时加载数据集,例如“select * from book where in in in(....)”; 我不确定这是不是一个好主意,但我没有其他想法。

由于 Hauke

0 个答案:

没有答案