Разбиение на страницы с JQL и API setFirstResult (), setMaxResults () не работает должным образом - PullRequest
0 голосов
/ 12 марта 2019

В моем приложении 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 на скриншоте ниже.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...