Реализация вложенной пагинации в Spring-Data - PullRequest
0 голосов
/ 01 октября 2019

Я работаю над веб-проектом с пружинной загрузкой и весенними данными jpa. позвольте мне вкратце рассказать о проблеме.

для фильтрации по каждому столбцу базы данных в нашей форме на лицевой стороне, мы создали такой параметр: ["colName", содержит "colValue"] этообщий способ для всех таблиц и форм. когда к приложению Spring загружается запрос, мы выполняем поиск с помощью Sepecification и Regex and Pagination (Page). в этом случае у нас есть проблема.

Как правило, мы хотим выполнить следующие шаги: 1. Использовать спецификацию Speacification и фильтр действий для All 2. Затем использовать Page findAll (Specification spec);и передайте spec для метода findAll. 3. для последнего шага Page finAllByColName (Stirng colName, Pageable pageable);и мы хотим передать предыдущую страницу в этом методе.

, которую мы не знаем, есть ли способ использовать вложенные Pageing в весенних данных, таких как коды, как показано ниже ??

//Repository
 Page<HseHTlvRequests> findAll(Specification specification, Pageable pageable);

    @Query(value = "select * from HSE_H_TLV_REQUESTS h where h.COD_BUSUN_TLVRQ=:codBusunTlvrq",nativeQuery = true)
    Page<HseHTlvRequests> findAllByDesGasTlvrq(@Param("codBusunTlvrq") String codBusunTlvrq,Pageable pageable);
}

//Service
Page<HseHTlvRequests> gridLoadByDesGas(String desGas,String search, Pageable pageable, String orderBy, String direction) throws ResourceNotFoundException;

//ServiceImpl
  @Override
    public Page<HseHTlvRequests> gridLoadByDesGas(String desGas, String search, Pageable pageable, String orderBy, String direction) throws ResourceNotFoundException {
        try {
            if (search == null) {
                return hseHTlvRequestsRepository.findAllByDesGasTlvrq(desGas, PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), orderBy != null ? new Sort(Sort.Direction.valueOf(direction), orderBy) : Sort.unsorted()));
            } else {
                SearchSpec<HseHTlvRequests> searchQuery = MiniParser.spec(search, HseHTlvRequests.class);
                Page<HseHTlvRequests> page = hseHTlvRequestsRepository.findAll(searchQuery, PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), orderBy != null ? new Sort(Sort.Direction.valueOf(direction), orderBy) : Sort.unsorted()));

                return hseHTlvRequestsRepository.findAllByDesGasTlvrq(desGas,page);
            }
        } catch (NoResultException | UnsupportedEncodingException e) {
            systemLog.error(e.getMessage());
            return null;
        }
    }
...