如果我有这3个实体:
@Entity 公共班学生{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) protected Long id; private String name;
}
@Entity @Inheritance(策略= InheritanceType.JOINED) 公共课程{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) protected Long id; @OneToMany private List<Student> students; private String name;
}
@Entity @Inheritance(策略= InheritanceType.JOINED) 公共班组{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) protected Long id; @OneToMany private List<Student> students; private String name;
}
如何使用JPQL查询删除学生?
我试试
DELETE FROM Student's WHERE s.name =“John Doe”
但我有
无法删除或更新父行:外键约束失败(database
,CONSTRAINT FK_course_student_students_ID
FOREIGN KEY(students_ID
)参考student
(ID
))
我需要在纯JPQL中执行此操作以获得性能,我无法执行entity.remove,因为我有10000个John doe,我需要在一秒钟内删除它们。
为什么JPQL没有说:“嘿,让我们从这个生物学课程中删除这个john doe,他不存在”而不是“嘿,生物课程非常重要,没有学生可以从这门课程中删除! “
我缺少什么以及我必须使用哪种注释?
谢谢!
编辑:添加@JoinColumn到OnToMany关系可以工作,除非学生被不同的表引用...
答案 0 :(得分:2)
默认情况下,通过连接表映射单向一对多关系。如果您对使用join talbe没有任何特殊要求,可以使用Student
中的外键,它可以配置如下:
@OneToMany
@JoinColumn
private List<Student> students;
它也应该解决你的约束违规问题。
答案 1 :(得分:0)
有时您可以使用update all query清除对已删除对象的引用。
您还可以将数据库上的约束配置为在删除时级联或为null,以避免出现约束问题。