Как можно разбить данные на страницы в Spring Data Cassandra? - PullRequest
0 голосов
/ 20 марта 2020

Я использовал CassandraRepository, но я не мог разбить на страницы свои данные.

Репозиторий:

@Repository
public interface AccountDaoInter extends CassandraRepository<Account,String> {
}

В CassandraRepository существует метод findAll(Pageable pageable);. (тип возврата Slice <>)

Я использую CassandraPageRequest для создания Pageable.

Служба:

@Override
public List<AccountDTO> findAll(Integer page){
    Slice<Account> accounts = accountDaoInter.findAll(CassandraPageRequest.of(page,10));

    return accounts
            .stream()
            .map(account -> modelMapper.map(account,AccountDTO.class)).collect(Collectors.toList());

}

Контроллер:

@GetMapping
public ResponseEntity<List<AccountDTO>> findAll(@RequestParam(name = "page") Integer p){
    return ResponseEntity.ok(accountServiceInter.findAll(--p));
}

Когда значение страницы равно 1, результат в порядке.

Если значение страницы равно 2 и выше, возникает внутренняя ошибка сервера.

Ошибка:

"Cannot create a Cassandra page request for an indexed page other than the first page (0)."

Error picture

Проект

1 Ответ

0 голосов
/ 23 марта 2020

Cassandra не поддерживает выборку случайной страницы, потому что Spring Data выбрасывает InvalidArgumentException. Вы должны получить первую страницу, а затем выполнять итерации, пока не доберетесь до запрашиваемой страницы. Вы можете найти больше информации об этом и обосновании этого поведения в Java документациях для драйверов при подкачке ( ссылка ).

...