2011-04-15 56 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查詢來清除刪除對象中的被刪除對象的引用。

您還可以配置您對數據庫進行級聯的約束或對刪除進行清零以避免約束問題。