Java 如何在Spring数据中选择性地级联删除操作

Java 如何在Spring数据中选择性地级联删除操作,java,hibernate,jpa,spring-data,Java,Hibernate,Jpa,Spring Data,在我们的对象模型中,使用Spring数据,我们有一些一对一的关系。假设一个教师对象有许多学生: @Entity public class Teacher { @OneToMany private List<Student> students; } @实体 公共班主任{ @独身癖 私人名单学生; } 正如这里所解释的:可以在注释后面使用(cascade=CascadeType.REMOVE),以确保每次删除教师都会删除其所有学生 然而,这不是我想要的。我通常希望学生

在我们的对象模型中,使用Spring数据,我们有一些一对一的关系。假设一个教师对象有许多学生:

@Entity
public class Teacher {
    @OneToMany
    private List<Student> students;
}
@实体
公共班主任{
@独身癖
私人名单学生;
}
正如这里所解释的:可以在注释后面使用
(cascade=CascadeType.REMOVE)
,以确保每次删除教师都会删除其所有学生


然而,这不是我想要的。我通常希望学生们还是孤儿。所以一切都很好,我省略了注释。但是现在,我想让用户能够选择删除一名教师是否应该删除所有学生。当然,我可以循环浏览记录,一个学生一个学生地做这个,但这似乎是一种浪费,因为这个功能已经存在了。因此,问题是:是否可以根据具体情况使用内置级联选项?

这是不可能的。顺便说一句,简单for(Student s:t.getStudents)em.remove(s)与根据用户响应打开/关闭某些内部机制相比,在我看来并不是一种“浪费”,简单的代码表明了发生了什么。没错,但级联机制当然是在数据库中实现的,这使它们完全不同。此外,级联可以在列组中传播(例如,如果student有一个结果列表),而手动实现将删除student,然后student.remove方法必须再次进行级联。这里的误差似乎更大。级联是在Java端实现的,而不是DB(除非特别指出,只使用提供程序扩展而不是jpa)。em.remove(student)将产生相同的层叠和sql,就好像该学生是由于教师删除时的层叠而被删除的一样。好的,谢谢。我不知道没有使用本机数据库约束。