删除的实例传递给合并错误 - 了解为什么在某些情况下会发生这种情况

时间:2017-06-19 11:38:22

标签: java spring jpa spring-data-jpa

我在学校和学生实体之间有一对多的关系(使用Spring Data JPA)

在尝试检索当前学生列表并使用下面的代码删除它时,我收到以下错误

School school = schoolRepo.findOne(schoolId);
Set<Student> students = school.getStudents();
studentRepo.delete(students);
schoolRepo.saveAndFlush(school);
  

传递给合并的已删除实例:[com.api.beans.Student#]

但是,当我使用自定义查询修改getStudents部分代码时,完全正常

School school = schoolRepo.findOne(schoolId);
Set<Student> students = studentRepo.findBySchool(schoolId);
studentRepo.delete(students);
schoolRepo.saveAndFlush(school);

其中findBySchool自定义查询在studentRepo中定义如下

 @Query("SELECT s FROM Student s WHERE  s.school.schoolId =:schoolId")
 Set<Student> findBySchool(@Param("schoolId") Long schoolId);

为什么会这样?我觉得我缺少一些概念清晰度,并希望了解这一点。

基本上,这两行之间有什么区别?

Set<Student> students = school.getStudents();
Set<Student> students = studentRepo.findBySchool(schoolId);

为什么第一行在第二种方法正常工作时出错?

0 个答案:

没有答案