Как получить все объекты «один ко многим» в GET-запросе с помощью Spring Boot и JPA - PullRequest
0 голосов
/ 18 апреля 2020
  @GetMapping("/tutorials")
      public ResponseEntity<List<Tutorial>> getAllTutorials(@RequestParam(required = false) String title) {
        try {
          List<Tutorial> tutorials = new ArrayList<Tutorial>();

          if (title == null)
            tutorialRepository.findAll().forEach(tutorials::add);
          else
            tutorialRepository.findByTitleContaining(title).forEach(tutorials::add);

          if (tutorials.isEmpty()) {
            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
          }

          return new ResponseEntity<>(tutorials, HttpStatus.OK);
        } catch (Exception e) {
          return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
      }

Я пытаюсь вернуть все учебники, и в каждом учебнике я хочу, чтобы видео, связанные с каждым учебником, появлялись при выполнении запроса GET, но по какой-то причине я не могу заставить его работать. Что-то не так с отображением?

package com.bezkoder.spring.datajpa.model;

import javax.persistence.*;

@Entity
@Table(name = "tutorials")
public class Tutorial {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "title")
    private String title;

    @Column(name = "description")
    private String description;

    @Column(name = "published")
    private boolean published;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "video_id")
    private List<Video> videos = new ArrayList<>();

    public Tutorial() {

    }

    public Tutorial(String title, String description, boolean published) {
        this.title = title;
        this.description = description;
        this.published = published;
    }

    public long getId() {
        return id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public boolean isPublished() {
        return published;
    }

    public void setPublished(boolean isPublished) {
        this.published = isPublished;
    }
}

Я ожидаю поле с названием videos, которое содержит массив видео экземпляров, связанных с каждым учебником, но я ничего не получаю. Я получаю только поля, связанные с уроками, что делает бесполезным отображение «один ко многим».

1 Ответ

0 голосов
/ 18 апреля 2020
public List<Video> getVideos() {
    return videos;
}

Я забыл поставить геттер для видео, поэтому он не работал. В большинстве учебных пособий не показаны методы получения и установки, и предполагается, что вы знаете, что они необходимы для правильной работы отображения.

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