Spring boot jpa query select как сделать

Мне необходимо, в зависимости от того, чего хочет пользователь, фильтровать мои посты (типа в соц сетях) по title, authorId, tags, отсортировать по названию поля в классе, указать order и лимитировать кол-во постов для постраничного отображения. Пользователь в адресной строке вводит все эти параметры GET /articles?skp=...&limit=...&q=title&authorId=...&tags=tag1,tag2&order=desc&sorted=field_name , НО может и не водить вовсе, или ввести только некоторые из них. Мой контроллер выглядит так:

@GetMapping("/articles")
    public List<Article> getAllPublicPosts(@RequestParam(name = "skip", required = false, defaultValue = "0") Long skip,
                                           @RequestParam(name = "limit", required = false, defaultValue = "10") Long limit,
                                           @RequestParam(name = "q", required = false, defaultValue = "") String postTitle,
                                           @RequestParam(name = "author", required = false, defaultValue = "0") Long authorId,
                                           @RequestParam(name = "sort", required = false, defaultValue = "none") String fieldName,
                                           @RequestParam(name = "order", required = false, defaultValue = "asc") String order,
                                           @RequestParam(name = "tags", required = false, defaultValue = "") String[] tags) {

        return articleService.getAllPublicPosts(skip, limit, postTitle, authorId, fieldName, order, tags);

    }

Я могу сделать все в коде, но для этого мне приходится доставать все значения в список. А что, если кол-во постов будет превышать Integer.MAX_VALUE? А что , если постов настолько много не будет, но по-прежнему много? Тогда код будет работать супер медленно

Важно в контроллере то, что есть дефолтные значения. Я бы хотела сделать такой @Query-select, чтобы, в случае чего, он бы игнорировал некоторые из @RequestParam, а точнее postTitle, authorId, fieldName, иначе при выборке он может мне ничего и не вернуть, но совсем не знаю как. И не знаю, возможно ли это в принципе. Если пилить для каждого случая отдельный метод в ArticleRepo, их станет слишком много


Ответы (0 шт):