Я знаю, что есть множество сообщений об этой проблеме, и я пробовал их решения, но все еще не смог решить свою проблему. Я запустил приложение Spring Boot, и оно подключено к postge sql db. У меня есть два класса: Студент и Курс. Я хочу создать между ними отношение ManyToMany. Когда я запускаю приложение, оно создает таблицы, как я хотел. А также, если я вставлю запись для таблицы course_student, я смогу отобразить курсы, которые принимает студент. Но я могу добавить новый курс для студента, ничего не происходит.
Студенческий класс
package com.example.demo.models;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "students")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String firstName;
@Column(nullable = false)
private String lastName;
@ManyToMany(
fetch = FetchType.LAZY,
cascade = {
CascadeType.ALL,
},
mappedBy = "students"
)
private Set<Course> courses = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}
}
Курс
package com.example.demo.models;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "courses")
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@ManyToMany(
fetch = FetchType.LAZY,
cascade = {
CascadeType.ALL,
}
)
@JoinTable(
name = "course_student",
joinColumns = { @JoinColumn(name = "course_id") },
inverseJoinColumns = { @JoinColumn(name = "student_id") }
)
private Set<Student> students = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}
IStudentRepository
package com.example.demo.repositories;
import com.example.demo.models.Student;
import org.springframework.data.jpa.repository.JpaRepository;
public interface IStudentRepository extends JpaRepository<Student, Long> {
}
Класс SqlStudentService
package com.example.demo.services;
import com.example.demo.models.Course;
import com.example.demo.models.Student;
import com.example.demo.repositories.IStudentRepository;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("SqlStudentService")
public class SqlStudentService implements IStudentService {
private final IStudentRepository studentRepository;
public SqlStudentService(IStudentRepository studentRepository) {
this.studentRepository = studentRepository;
}
public List<Student> getStudents() {
return studentRepository.findAll(Sort.by(Sort.Direction.ASC, "id"));
}
public Student getStudentById(Long id) {
return studentRepository.findById(id).orElse(null);
}
public Student insertStudent(Student student) {
return studentRepository.save(student);
}
public Student updateStudent(Long id, Student student) {
Student oldStudent = getStudentById(id);
if (oldStudent != null) {
oldStudent.setFirstName(student.getFirstName());
oldStudent.setLastName(student.getLastName());
return studentRepository.save(oldStudent);
}
return null;
}
public void deleteStudentById(Long id) {
studentRepository.deleteById(id);
}
public void addStudentToCourse(Course course, Long studentId) {
Student student = getStudentById(studentId);
if (student != null) {
student.getCourses().add(course);
studentRepository.save(student);
}
}
}
Все остальные функции в классе SqlStudentService работают правильно, но метод addStudentToCourse не работает . Я вернул объект Student после student.getCourses (). Add (course); линия. Курс успешно добавлен. Но он не добавляется к этой записи в таблицу course_student. Вы хоть представляете, что мне не хватает? Большое вам спасибо.