Я работаю над проектом с 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
},