代码之家  ›  专栏  ›  技术社区  ›  Nital

使用JQL和setFirstResult()分页,setMaxResults()API未按预期工作

  •  0
  • Nital  · 技术社区  · 5 年前

    Spring Boot 申请表,我有 Stored Procedure 从我试图实现的存储库层调用 pagination .

    这个DB调用返回所有记录,尽管使用了 setFirstResult() , setMaxResults()

    查询应该只返回前5条记录,因为我已将页面大小设置为5作为默认值。所以它实际上应该会给我3页。但当代码执行时,它会在一次快照中返回所有13条记录 query.getResultList(); 方法。

    不确定我的理解是否正确,或者我遗漏了什么。

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

    LinkApplRepositoryCustom.java

    public interface LinkApplRepositoryCustom {
    
         List<LinkStatsReport> generateReport(String applicationId, String fromDate, String toDate);
    
    }
    

    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 回复  |  直到 5 年前