Как отменить запрос findAll () в интерфейсе репозитория pagingAndSorting с помощью Spring data REST - PullRequest
0 голосов
/ 23 июня 2018

У меня есть репозиторий отдыха JPA Spring.

public interface SumLogRepository extends PagingAndSortingRepository<SumLog, Long> {

    //custom query method
    List<SumLog> findByFoo(String lastName);

    //How do I make this method return the results in REVERSE order?
    List<SumLog> findAll();

}

Я бы хотел, чтобы метод findAll () возвращал элементы в обратном порядке.

Посколькуэто интерфейс, я не могу переопределить методы прямо здесь.

Возможно ли это сделать?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Я думаю, вы можете использовать Pageable для подкачки и сортировки, как показано ниже.

public interface SumLogRepository extends PagingAndSortingRepository<SumLog, Long> {
     Page<SumLog> findAll(Pageable pageable);
}

Пример использования.

Pageable pageable = new PageRequest(0,20 , new Sort(Sort.Direction.DESC, "id"));
Page<SumLog> pageSumLog = sumLogRepository.findAll(pageable);

И пружина может связывать pageable для использования в контроллерекак это.(ссылка: https://docs.spring.io/spring-data/rest/docs/current/reference/html/#paging-and-sorting.sorting)

@GetMapping("/sumlogs")
public ResponseList<SumLog> retrieveLogs(Pageable pageable) {
    Page<SumLog> pageSumLog = sumLogRepository.findAll(pageable)
    return new ResponseList<>(pageSumLog);
}
0 голосов
/ 23 июня 2018

Вы можете использовать ключевые слова OrderBy и Desc в своем методе запроса:

List<SumLog> findAllByOrderByIdDesc();

В этом случае вы получите такой SQL-запрос:

select ... from sum_logs sl order by sl.id desc

Дополнительная информация: Создание запроса

ОБНОВЛЕНО

Чтобы изменить поведение стандартных методов репозиториев, вы можете переопределить их собственным запросом:

@Query("select sl from SimLog order by sl.id desc")
@Override
List<SumLog> findAll();

@Query("select sl from SimLog order by sl.id desc")
@Override
Page<SumLog> findAll(Pageable pageable);

ОБНОВЛЕНО 2

Более гибкий подход - если порядок сортировки еще не установлен, то мы устанавливаем его с помощью 'id desc':

@Override
default Page<SumLog> findAll(Pageable p) {
    if (p.getSort().isUnsorted()) {
        findAllBy(PageRequest.of(p.getPageNumber(), p.getPageSize(), Sort.by(Sort.Direction.DESC, "id")));
    }
    return findAllBy(p);
}

Page<SumLog> findAllBy(Pageable pageable);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...