Вместо расписания конкретной группы выдает расписание всех групп
У меня было задание написать университетское расписание. Столкнулся с проблемой, что поскольку у меня поиск расписания идет по дню и группе(не id группы или еще что-то, а именно группе), у меня вместо расписания конкретной группы выдает все расписание(и первой группы, и второй), это связано вероятнее всего с тем, что у меня отношение между группой и расписанием "одна группа может иметь много расписаний". Вот только как это исправить я не знаю. Уточняю: пользователь вводит id студента, с помощью CrudRepo ищется студент по id, затем берется группа студента и поиск расписания на конкретный день конкретной группы студента.
controller
@RestController
@RequestMapping("api/timetable/")
public class ScheduleController {
private final ScheduleService scheduleService;
@Autowired
public ScheduleController(ScheduleService scheduleService){
this.scheduleService = scheduleService;
}
@GetMapping("{studentId}")
public String getSchedule(@PathVariable Long studentId){
return scheduleService.findScheduleByStudentId(studentId);
}
}
student entity
@Entity
@Table(name = "student")
@Getter
@NoArgsConstructor
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long studentId;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToOne(fetch = FetchType.EAGER)
@JoinTable(
name = "students_group",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "group_id")
)
private Group group;
public Student(String firstName, String lastName, Group group){
this.firstName = firstName;
this.lastName = lastName;
this.group = group;
}
}
group entity
@Entity
@Table(name = "groups")
@Getter
@NoArgsConstructor
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int groupId;
@Column(name = "number_of_group")
private String numberOfGroup;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(
name = "groups_timetable",
joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "timetable_id")
)
private List<Timetable> timetable;
public Group(String numberOfGroup, List<Timetable> timetable){
this.numberOfGroup = numberOfGroup;
this.timetable = timetable;
}
}
timetable entity
@Entity
@Table(name = "timetable")
@Getter
@NoArgsConstructor
@ToString
public class Timetable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long timetableId;
private String schedule;
@Column(name = "week_day")
private int weekDay;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(
name = "groups_timetable",
joinColumns = @JoinColumn(name = "timetable_id"),
inverseJoinColumns = @JoinColumn(name = "group_id")
)
private List<Group> group;
public Timetable(String schedule, Integer weekDay){
this.schedule = schedule;
this.weekDay = weekDay;
}
}
service
@Service
public class ScheduleService {
private final StudentRepository studentRepository;
private final TimetableRepository timetableRepository;
@Autowired
public ScheduleService(
StudentRepository studentRepository,
TimetableRepository timetableRepository){
this.studentRepository = studentRepository;
this.timetableRepository = timetableRepository;
}
public String findScheduleByStudentId(long studentId){
Student student = studentRepository.findStudentByStudentId(studentId).orElseThrow(
() -> new StudentNotFoundException(studentId)
);
return getSchedule(student.getGroup());
}
public String getSchedule(Group group){
Calendar calendar = Calendar.getInstance();
Timetable timetable = timetableRepository.
findByWeekDayAndGroup(calendar.get(Calendar.DAY_OF_WEEK), group);
return timetable.getSchedule();
}
}
таблички
CREATE TABLE student(id BIGSERIAL PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(30));
CREATE TABLE groups(id SERIAL PRIMARY KEY, number_of_group VARCHAR(6));
CREATE TABLE students_group(student_id BIGSERIAL REFERENCES student(id), group_id SERIAL REFERENCES groups(id));
CREATE TABLE timetable(id BIGSERIAL PRIMARY KEY, schedule VARCHAR(50), week_day SMALLINT);
CREATE TABLE groups_timetable(group_id SERIAL REFERENCES groups(id), timetable_id BIGSERIAL REFERENCES timetable(id));
INSERT INTO student(id, first_name, last_name) VALUES (1, 'Gleb', 'Chizh');
INSERT INTO groups(id, number_of_group) VALUES (1, '021703');
INSERT INTO students_group(student_id, group_id) VALUES (1, 1);
INSERT INTO timetable(id, schedule, week_day) VALUES (1, 'ppvis, math', 1);
INSERT INTO timetable(id, schedule, week_day) VALUES (2, 'maois, economy, psychology', 2);
INSERT INTO timetable(id, schedule, week_day) VALUES (3, 'math, ppvic, aois', 3);
INSERT INTO timetable(id, schedule, week_day) VALUES (4, 'msisvinft, maois', 4);
INSERT INTO timetable(id, schedule, week_day) VALUES (5, 'psychology, economy, math', 5);
INSERT INTO timetable(id, schedule, week_day) VALUES (6, 'ppvis, aois', 6);
INSERT INTO timetable(id, schedule, week_day) VALUES (7, 'aois, math', 7);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (1,1);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (1,2);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (1,3);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (1,4);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (1,5);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (1,6);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (1,7);
INSERT INTO student(id, first_name, last_name) VALUES (2, 'Stas', 'Badey');
INSERT INTO groups(id, number_of_group) VALUES (2, '056001');
INSERT INTO students_group(student_id, group_id) VALUES (2, 2);
INSERT INTO timetable(id, schedule, week_day) VALUES (8, 'economy, math, maois', 1);
INSERT INTO timetable(id, schedule, week_day) VALUES (9, 'msisvinft, psychology', 2);
INSERT INTO timetable(id, schedule, week_day) VALUES (10, 'aois', 3);
INSERT INTO timetable(id, schedule, week_day) VALUES (11, 'ppvis, economy, math', 4);
INSERT INTO timetable(id, schedule, week_day) VALUES (12, 'psychology, math', 5);
INSERT INTO timetable(id, schedule, week_day) VALUES (13, ' ', 6);
INSERT INTO timetable(id, schedule, week_day) VALUES (14, ' ', 7);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (2,1);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (2,2);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (2,3);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (2,4);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (2,5);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (2,6);
INSERT INTO groups_timetable(group_id, timetable_id) VALUES (2,7);