使用JQL和setFirstResult(),setMaxResults()API进行分页无法按预期运行

时间:2019-03-12 20:50:29

标签: hibernate spring-boot jpa pagination spring-data-jpa

在我的Spring Boot应用程序中,我正在尝试实现Stored Procedure的存储库层进行一个pagination调用。

尽管在查询中使用了setFirstResult()setMaxResults()方法,该数据库调用仍返回了所有记录。

仅当我将页面大小默认设置为5时,查询才应返回前5条记录。因此,它实际上应该还给我3页。但是,当代码执行query.getResultList();方法时,它会一次性返回所有13条记录。

不确定我的理解是正确的还是缺少任何东西。

LinkApplRepository.java

@Repository
public interface LinkApplRepository extends PagingAndSortingRepository<LinkAppl, String>, LinkApplRepositoryCustom {

}

LinkApplRepositoryCustom.java

public interface LinkApplRepositoryCustom {

     List<LinkStatsReport> generateReport(String applicationId, String fromDate, String toDate);

}

LinkApplRepositoryImpl.java

public class LinkApplRepositoryImpl implements LinkApplRepositoryCustom {

    @PersistenceContext
    private EntityManager em;

     @Override
        public List<LinkStatsReport> generateReport(String applicationId, String fromDate, String toDate) {
            applicationId = "ABC";
            fromDate = "01-JAN-2018";
            toDate = "11-MAR-2019";
            int pageNumber = 1;
            int pageSize = 5;
            StoredProcedureQuery query = em.createStoredProcedureQuery("PKG_USROUTER.LINK_STATS_REPORT");
            query.registerStoredProcedureParameter(1, String.class, ParameterMode.IN);
            query.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
            query.registerStoredProcedureParameter(3, String.class, ParameterMode.IN);
            query.registerStoredProcedureParameter(4, Void.class, ParameterMode.REF_CURSOR);
            query.setParameter(1, applicationId);
            query.setParameter(2, fromDate);
            query.setParameter(3, toDate);
            query.setFirstResult((pageNumber - 1) * pageSize);
            query.setMaxResults(pageSize);
            List<LinkStatsReport> linkStatsReportLst = new ArrayList<>();
            List<Object[]> al = query.getResultList();
            log.debug("al:" + al);
      ....
    }

我还附加了调试器,该调试器在下面的屏幕快照中显示pageSize:5和al:size = 13。

enter image description here

0 个答案:

没有答案