在写Hibernate实验时,在尝试删除某条老师记录时,出现这个错误,但是同样的方法删除学生却没有问题
首先说明的是,我的表是学生老师表,其中学生和老师之间的关系为多对一,老师中有Set<Student> students
出现这个错误的原因首先是存在两个session,但是我的session都是一开一关的。
出问题的代码如下:
Session session = SessionFactoryUtil.getSession();
Transaction transaction = session.beginTransaction();
TeacherDAO teacherDAO = new TeacherDAO();
Teacher teacher = (Teacher) teacherDAO
.findById(((Teacher) teacherTableView.getSelectionModel().getSelectedItem()).getID());
Set<Student> students = teacher.getStudents();
for (Student s : students) {
s.setTutor(null);
session.merge(s);
}
session.delete(teacher);
transaction.commit();
refreshTableView();
fillComboBox();
出错在session.delete(teacher)这句上
思考了一下,估计是在读取teacher的Set<Student>时,打开了一个session,导致后面的merge出错
因此尝试在delete之前将set设置为空,发现仍然报错,于是猜测是session.merge(s)这句导致后面的delete不能过。
于是尝试交换了一下位置
Session session = SessionFactoryUtil.getSession();
Transaction transaction = session.beginTransaction();
TeacherDAO teacherDAO = new TeacherDAO();
Teacher teacher = (Teacher) teacherDAO
.findById(((Teacher) teacherTableView.getSelectionModel().getSelectedItem()).getID());
Set<Student> students = teacher.getStudents();
teacher.setStudents(null);
session.delete(teacher);
for (Student s : students) {
s.setTutor(null);
session.merge(s);
}
transaction.commit();
refreshTableView();
fillComboBox();
就这样。。过了