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。