簡體   English   中英

Spring 引導 JPA 多對多刪除連接表關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM