【发布时间】:2021-07-12 13:21:14
【问题描述】:
我有一个实体 Student 和一个实体 Course,它们有多对多的关系,Student 类是所有者。我可以为学生添加课程,但无法为学生删除课程。我确实创建了一个用于删除连接的实用程序方法,但它不起作用,而且我无法找到错误的原因。没有错误,它什么也不做。 也许有人遇到过类似的事情?提前谢谢你
这里是学生实体:
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 + "]";
}
}
【问题讨论】:
-
你能把代码从学生身上删除吗?
标签: java spring spring-boot spring-mvc spring-data-jpa