Java - 用于删除 oneToMany 关系的 JPQL 查询

标签 java orm jpa persistence jpql

如果我有这 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/

相关文章:

hibernate - 如何在两列上指定 OrderBy 子句

java - 如何在 Hibernate 中将 @OneToOne 关系映射到静态表

mysql - LEFT JOIN 与 ON - Spring 中的 JPA 存储库

java - wait 方法唤醒而不调用 notify(NOT SPURIOUS WAKEUP)

java - 向 TextField 添加提示

php - Propel2 与表连接,然后使用聚合函数进行分组

node.js - 使用sequelize N :M associations实现 "correct"结果的 "flat"方法是什么

Java 瓦片 map 加载器

java - 如何创建一个为所有类创建对象的 setUp 方法?

orm - Morphia 用于 Scala