#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 для извлечения только соответствующих данных.