GET-запрос Spring boot во многих отношениях

avatar
Eugen Gîrlescu
8 августа 2021 в 17:14
89
0
0

Я работаю над проектом с Spring Boot, и у меня возникли трудности с реализацией GET-запроса в отношениях «многие ко многим». Я новичок в Spring Boot. У меня есть 2 объекта:

@Data
@Entity
@Table(name = "scheduled_interview")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Interview {

    @Id
    @Column(name = "interview_id", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long interviewID;

    @Column(name = "candidate_id")
    private Long candidateID;

    @Column(name = "interview_date")
    private LocalDateTime interviewDate;


    @Column(name = "state", nullable = false,
            columnDefinition = "ENUM(SCHEDULED, ONGOING, CLOSED) default 'SCHEDULED'")
    @Enumerated(EnumType.STRING)
    private InterviewState interviewState;

    @ManyToMany
    @JoinTable(
            name = "interviewer",
            joinColumns = @JoinColumn(name = "interview_id"),
            inverseJoinColumns = @JoinColumn(name = "user_id")
    )
    List<User> users = new LinkedList<>();
}

Также у меня есть InterviewDTO с классом преобразователя для преобразования сущности в DTO и наоборот.

    @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class InterviewDTO {
    private Long interviewID;
    private Long candidateID;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime interviewDate;
    private InterviewState interviewState;
    private List<Long> userIds;
    private List<UserDTO> users;
}

@Data
@Entity
@Table(name = "users")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Column(nullable = false, unique = true)
    private String mail;

    @Column(nullable = false)
    private String password;

    @Column(name = "first_name", nullable = false)
    private String firstName;

    @Column(name = "last_name", nullable = false)
    private String lastName;

    @Column(name = "is_admin", nullable = false, columnDefinition = "false")
    private Boolean isAdmin;

    @Column(nullable = false)
    @Enumerated(EnumType.STRING)
    private Roles role;

    @ManyToMany(mappedBy = "users")
    List<Interview> interviewList = new LinkedList<>();
}

Итак, у меня есть в базе данных таблица Users и таблица Interview, и я могу назначать пользователей, таких как технический интервьюер, HR или PTE, на собеседование, поэтому у меня есть другая таблица для отношений многие ко многим с именем Interviewer. У меня есть репозиторий:

    @Repository
public interface InterviewRepository extends JpaRepository<Interview, Long> {
    List<User> getUsersByInterviewID(Long id);
}

У меня есть служба:

public List<InterviewDTO> getInterviews() {
    InterviewConverter interviewConverter = new InterviewConverter();


    return interviewConverter.entityToDto(interviewRepository.findAll());
}

У меня есть контроллер:

    @RestController
@RequestMapping("/api/interviews")
public class InterviewController {
    final InterviewService interviewService;

    @Autowired
    public InterviewController(InterviewService interviewService) {
        this.interviewService = interviewService;
    }

    @GetMapping
    public List<InterviewDTO> getInterviews() {
        return interviewService.getInterviews();
    }

Но я не знаю, как получить этих пользователей из базы данных и добавить их в мой запрос GET, потому что в POSTMAN, когда я тестирую, у меня есть это тело с идентификаторами пользователей и пользователями NULL:

[
{
    "interviewID": 1,
    "candidateID": 2,
    "interviewDate": "2021-08-20 15:00:00",
    "interviewState": "SCHEDULED",
    "userIds": null,
    "users": null
},
{
    "interviewID": 2,
    "candidateID": 1,
    "interviewDate": "2021-07-17 11:30:00",
    "interviewState": "SCHEDULED",
    "userIds": null,
    "users": null
},
{
    "interviewID": 3,
    "candidateID": 4,
    "interviewDate": "2021-08-25 10:15:00",
    "interviewState": "SCHEDULED",
    "userIds": null,
    "users": null
},
{
    "interviewID": 4,
    "candidateID": 3,
    "interviewDate": "2021-07-21 13:03:30",
    "interviewState": "SCHEDULED",
    "userIds": null,
    "users": null
},
Источник

Ответы (0)