Сортировка по двум объединенным полям в методе .findAll (Pagination pagination) в PagingAndSortingRepository - PullRequest
0 голосов
/ 28 марта 2019

Я получил конечную точку / пользователя API, который возвращает отсортированный и разбитый на страницы результат объекта User.Мой пример, кажется, работает нормально, и я могу отсортировать результат с параметрами, такими как / user? Sort = name, desc.

Моя проблема в том, что эта сортировка по умолчанию работает только для простых атрибутов, таких как String, int, long, ... То, что я сейчас пытаюсь реализовать, это какие-то пользовательские сортировки, например, сортировка по перечислению (mustили несколько комбинированных полей (имя объединено с фамилией).

Возможно ли это сделать в любом случае?

Контроллер

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowird
    private UserRepository userRepository;

    @GetMapping("") public ResponseEntity getAll(Pageable pageable) {
        return ResponseEntity.ok(userRepository.findAll(pageable));
    }
}

UserRepository

@Repository
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}

Сущность

public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;

    @Column(name = "name")
    private String name;

    @Column(name = "surname")
    private String surname;
}

1 Ответ

0 голосов
/ 28 марта 2019

Если я вас правильно понимаю, вы хотите добиться упорядочения по одному полю, а если есть похожие значения, например surname, то вы хотите, чтобы они упорядочивались по другому полю, например name.

Что ж, это можно сделать, объединив метод репозитория, состоящий из имен полей и ключевых слов Asc и Desc, подобных этому в вашем случае:

findAllOrderBySurnameAscNameAsc

Если вы хотите использовать enum для динамической обработки параметров , класс Spring Data Sort - это класс, который вы ищете.

В зависимости от конструкции вашего enum теперь вы можете собрать Pageable вроде:

Pageable sortedBySurnameAndName = 
  PageRequest.of(0, 10, Sort.by("surname").asending().and(Sort.by("name")));

… и передайте его вашему @Repository методу.

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