Hibernate 休眠多对多删除表1、表1、表2和表2中的数据

Hibernate 休眠多对多删除表1、表1、表2和表2中的数据,hibernate,many-to-many,cascading-deletes,Hibernate,Many To Many,Cascading Deletes,我有两个实体:学生和课程 有很多对很多的关系。学生和课程的定义如下: @Entity @Table(name = "student") public class Student { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; @NotNull @Size(max = 100) @Column(unique = true) private Stri

我有两个实体:学生和课程

有很多对很多的关系。学生和课程的定义如下:

@Entity
@Table(name = "student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @NotNull
    @Size(max = 100)
    @Column(unique = true)
    private String name;

    @NotNull
    @Column(unique = true)
    private Integer age;

    @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                CascadeType.PERSIST,
                CascadeType.MERGE
            })
    @JoinTable(name = "student_lesson", joinColumns = @JoinColumn(name = "student_id", referencedColumnName = "id"), 
    inverseJoinColumns = @JoinColumn(name = "lesson_id", referencedColumnName = "id"))
    private Set<Lesson> lesson= new HashSet<>();
....
但是,当我在LessonDao中运行entityManager.remove(lesson)时,lesson、student_lesson和student中的所有相关数据都将被删除。 但我不想删除student表中的数据。我应该如何防止学生表中的数据不被删除


谢谢

这是因为您提供了
级联类型。请删除课程实体中的
。只要删除这个级联,它就会工作。

当我删除它时,它就会抛出一个异常。当我添加CascadeType.REMOVE时,它会从lesson、student_lesson和student中删除数据。我不想从学生中删除条目。
@Entity
@Table(name = "lesson")
public class Lesson {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private String code;
    private int credit;

    @ManyToMany(fetch = FetchType.LAZY,
    cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE,
        CascadeType.REMOVE
    },
    mappedBy = "lesson")
    @JsonBackReference
    private Set<Student> students = new HashSet<>();
@Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void deleteStudent(Student student) {

        try {
            entityManager.remove(student);
        } catch (NoResultException e) {
            throw new ResourceNotFoundException("Student doesn't exist");
        } finally {
            //entityManager.close();
        }
    }