在我的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。