Отношение «многие ко многим» - PullRequest
0 голосов
/ 14 января 2020

У меня есть две сущности, 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 в такой ситуации

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