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();
}
}