В моем приложении Spring Boot
у меня есть вызов Stored Procedure
из уровня хранилища, где я пытаюсь реализовать pagination
.
Этот вызов БД возвращает мне все записи, несмотря на то, что я использовал setFirstResult()
, setMaxResults()
методы запроса.
Запрос должен вернуть мне только первые 5 записей, так как я установил размер страницы на 5 по умолчанию.Так что это должно практически вернуть мне 3 страницы.Но он возвращает все 13 записей за один раз, когда код выполняет метод query.getResultList();
.
Не уверен, верно ли мое понимание или я что-то упустил.
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);
....
}
Iтакже прикрепили отладчик, который показывает pageSize: 5 и al: size = 13 на скриншоте ниже.