我已经研究了几个关于hibernate一对多单向关系的例子,但是无法找到如何从现有列表中删除孤立级联。
假设我有一个MyClass类
@OneToMany(fetch=FetchType.LAZY, cascade={
CascadeType.PERSIST,
CascadeType.REMOVE}, orphanRemoval=true)
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinTable(name="enrolled_student",
joinColumns = {@JoinColumn(name="Class_ID")},
inverseJoinColumns = {@JoinColumn(name="STUDENT_ID") })
public List<Student> getStudentList() { return studentList;}
public void setStudentList(List<Student> studentList) { this.studentList = studentList;}
private List<Student> List;
如果我有一个学生名单,如s1,s2,s3。现在我想删除学生s2,我预计表学生中的s2上的一行将被删除,并且在s2 id中表中的行enrolled_student将被删除。
我试图这样做:
Override
@Transactional
public void addStudentToClass(MyClass myClass, Student student) {
MyClass attachedMyClass = classDao.merge(myClass);
attachedMyClass.getStudentList().remove(student);
classDao.update(attachedMyClass);
}
因此,我尝试合并myclass
实体,以防止在加载学生列表时进行懒惰的初始化。然后我从列表中删除学生并更新列表。但它不断抛出NullPointerException
。
我尝试通过删除学生表中的行来解决这个问题:
public void deleteStudent(Student student) {
studentDao.delete(student);
}
这也不起作用,因为学生也存在于enrolled_student表中。
您可以告诉我一个正确的删除孤儿的方法吗?