Возвращает список на основе необязательных параметров запроса

#mysql #spring-boot #hibernate #spring-data-jpa #spring-rest

#mysql #spring-boot #спящий режим #spring-data-jpa #spring-rest

Вопрос:

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

 /GET Filter_Questions - Returns list of questions based on the combination of following
query parameters
  a. Input
    i. Companies - List of companies - Optional
    ii. Subtopics - List of subtopics - Optional
    iii. Likes - Questions with more votes than votes sent as input - Optional
    iv. Date - Questions asked after a given date - Optional
    v. Tags - List of tags - - Optional
  b. Output
    i. Question ID
    ii. Question Text
    iii. Companies - List of companies for which the question was asked
    iv. Likes - Number of likes of the question
    v. Answer - Answer with most likes for the given question
    vi. Tags - Tags associated with the given question
  

Как мне подойти к этому вопросу, способ, которым я могу это сделать, — получить все вопросы в списке, а затем составить отдельные списки для всех параметров запроса,

Если пользователь предоставит 3 параметра, то будет создано 3 списка, затем я извлеку дубликаты из списка и верну этот созданный список

Но я чувствую, что должен быть более чистый способ приблизиться к этому?

Комментарии:

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

Ответ №1:

Вы можете выполнить необязательную фильтрацию, например, с помощью спецификаций Spring Data. Создайте пользовательский класс спецификации, который добавляет объединения и предикаты на основе заданных значений фильтра.

Затем хранилище данных Spring принимает эту спецификацию в качестве параметра и использует граф сущностей, который извлекает все упомянутые вами ассоциации или использует проекцию DTO для извлечения только соответствующих данных.