[英]Spring Boot JPA, data do not persist in join table of many-to-many relationship
[英]Spring Boot JPA many to many removing join table relationship
我有一個實體 Student 和一個實體 Course,它們有多對多的關系,Student class 是所有者。 我可以為學生添加課程,但無法為學生刪除課程。 我確實創建了一個用於刪除連接的實用程序方法,但它不起作用,我無法找到錯誤的原因。 沒有錯誤,它什么也不做。 也許有人遇到過類似的事情? 先感謝您
這是學生實體:
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name="student")
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})//(fetch = FetchType.LAZY)
@JoinTable(name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id"))
private Set<Course> courseTaken = new HashSet<>();
public Student() {
}
public Student(String firstName, String lastName, Set<Course> courseTaken) {
this.firstName = firstName;
this.lastName = lastName;
this.courseTaken = courseTaken;
}
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> getCourseTaken() {
return courseTaken;
}
public void setCourseTaken(Set<Course> courseTaken) {
this.courseTaken = courseTaken;
}
public void removeCourse(Course tempCourse) {
courseTaken.remove(tempCourse);
tempCourse.getStudentAttending().remove(this);
}
@Override
public String toString() {
return "Student [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", courseTaken="
+ courseTaken + "]";
}
}
這是一個課程實體:
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name="course")
public class Course implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(name="course_name")
private String courseName;
@Column(name="course_description")
private String courseDescription;
@ManyToMany(mappedBy = "courseTaken")
private Set<Student> studentAttending = new HashSet<>();
public Course() {
}
public Course(String courseName, String courseDescription, Set<Student> studentAttending) {
this.courseName = courseName;
this.courseDescription = courseDescription;
this.studentAttending = studentAttending;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getCourseDescription() {
return courseDescription;
}
public void setCourseDescription(String courseDescription) {
this.courseDescription = courseDescription;
}
public Set<Student> getStudentAttending() {
return studentAttending;
}
public void setStudentAttending(Set<Student> studentAttending) {
this.studentAttending = studentAttending;
}
@Override
public String toString() {
return "Course [id=" + id + ", courseName=" + courseName + ", courseDescription=" + courseDescription + "]";
}
}
哦,我找到了我錯過的東西,我只是忘記將更改保存到數據庫中,student.save 丟失了。 所有作品。
@GetMapping("/deleteCourse")
public String deleteCourseForStudent(@RequestParam("courseId") Long courseId, @RequestParam("studentId") Long studentId) {
Course tempCourse = courseService.findById(courseId);
Student tempStudent = studentService.findById(studentId);
tempStudent.removeCourse(tempCourse);
studentService.save(tempStudent);
return "redirect:/student/details?studentId=" + studentId;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.