У меня есть две сущности, Project и Tag со многими ко многим, мне нужно найти:
@Entity
public class Project implements Serializable {
private Long id;
private String name;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "project_tag",
joinColumns = @JoinColumn(name = "project_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "tag_id", referencedColumnName = "id"))
private Set<Tag> tags = new HashSet<>();
}
и:
public class Tag implements Serializable {
private Long id;
private String name;
}
, поэтому мне нужно написать API для получить список проектов в ответ, когда теги пришли из какой-либо формы, они приходят с searchParam :
@GetMapping("/projects")
public ResponseEntity<List<Project>> getAllProjects(Pageable pageable,
@RequestParam String filter,
@RequestParam MultiValueMap<String, String> queryParams, UriComponentsBuilder uriBuilder,
@RequestParam(required = false, defaultValue = "false") boolean eagerload) {
Map<String, Object> searchParams = new HashMap<>();
if(filter != null) {
JsonParser parser = new BasicJsonParser();
searchParams = parser.parseMap(filter);
}
final Page<ProjectShortDTO> page = projectService.getAllProjects(pageable, searchParams);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(uriBuilder.queryParams(queryParams), page);
return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}
Так что проблема в том, что я действительно не знаю, что делать в Метод обслуживания:
@Transactional(readOnly = true)
public Page<ProjectDTO> getAllProjects(Pageable pageable, Map<String, Object> searchParams) {
Specification<PetroleumApplication> where = parseFilter(searchParams, null);
return projectRepository.findAll(pageable).map(ProjectDTO::new);
}
Я пытался использовать спецификацию Spring, и я не знаю, что делать, если появится массив тегов, как использовать спецификацию api в такой ситуации