我想知道在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