Hibernate使用连接表正确删除orphan - 单向

时间:2015-01-11 01:39:02

标签: hibernate

我已经研究了几个关于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表中。

您可以告诉我一个正确的删除孤儿的方法吗?

0 个答案:

没有答案
相关问题