2011-04-15 55 views
0

如果我有这3个实体:爪哇 - JPQL查询删除一对多关系

@Entity 公共类学生{

@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(策略= InheritanceType.JOINED) 公共类组{

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
protected Long id; 

@OneToMany 
private List<Student> students; 

private String name; 

}

如何删除学生JPQL查询?

我尝试

DELETE FROM学生小号 WHERE s.name = “李四”

但我有

不能删除或更新父行,外键约束失败(database,CONSTRAINT FK_course_student_students_ID FOREIGN KEY(students_ID)参考文献studentID))

我需要在纯JPQL中进行性能测试,我不能做一个entity.remove,因为我有10000个doe,我需要在一秒钟内删除它们。

为什么JPQL没有说:“嘿,让我们从这个生物学课程中删除这个约翰·杜伊,他不存在”而不是“嘿,生物学课程非常重要,所以没有学生可以从这门课程中删除!“

我缺少什么以及我必须使用哪种注释?

谢谢!

编辑:添加@JoinColumn到OnToMany关系可以工作,除非学生是由不同的表格中引用...

回答

2

默认情况下,单向的一个一对多的关系是通过连接表映射。

@OneToMany 
@JoinColumn 
private List<Student> students; 

还应该有约束违规解决您的问题:如果你没有关于使用加入talbe您可以在Student使用外键,而不是任何特殊要求,可进行如下配置。

+0

谢谢,它解决了原始问题的问题,但我现在有另一个问题,实际上我有多个表引用Student实体,所以Student无法存储关系,我需要多个relathionship表。 – 2011-04-15 12:53:31

0

有时,您可以使用update all查询来清除删除对象中的被删除对象的引用。

您还可以配置您对数据库进行级联的约束或对删除进行清零以避免约束问题。