如果我有这 3 个实体:
@Entity public class Student {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) protected Long id; private String name;
}
@Entity @Inheritance(strategy=InheritanceType.JOINED) public class Course {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) protected Long id; @OneToMany private List<Student> students; private String name;
}
@Entity @Inheritance(strategy=InheritanceType.JOINED) public class Group {
@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"
但是我有
无法删除或更新父行:外键约束失败(数据库
,CONSTRAINT FK_course_student_students_ID
FOREIGN KEY (students_ID
) REFERENCES 学生
(ID
))
为了性能,我需要在纯 JPQL 中执行此操作,我无法执行实体.remove,因为我有 10000 个 John doe,我需要在一秒钟内删除它们。
为什么 JPQL 不说:“嘿,让我们从这门生物类(class)中删除这个约翰·多伊,他不存在”,而不是“嘿,生物类(class)非常重要,任何学生都不能从这门类(class)中删除!” ”
我缺少什么以及我必须使用哪种注释?
谢谢!
编辑:将 @JoinColumn 添加到 OnToMany 关系可以工作,除非学生被不同的表引用...
最佳答案
默认情况下,单向一对多关系是通过连接表映射的。如果您对使用 join talbe 没有任何特殊要求,可以使用 Student
中的外键代替,配置如下:
@OneToMany
@JoinColumn
private List<Student> students;
它还应该解决您的约束违规问题。
关于Java - 用于删除 oneToMany 关系的 JPQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675200/