1

我在Hibernate關係和Save-Update-Delete中遇到了一些問題。比方說,我有以下幾點:刪除具有關係的對象 - 休眠

public class Subject{ 
     @Id 
     private int ID; 
     private String Name; 
     //getters and setters 
} 


public class Grade{ 
     @Id 
     private int ID; 
     private String Name; 
     //getters and setters 
} 


public class Course{ 
     @Id 
     private int ID; 
     @ManyToOne 
     private Grade G; 
     @ManyToOne 
     private Subject S; 
     //getters and setters 
} 


public class Teacher extends User{ 
     @ManyToMany 
     List<Course> Courses = new ArrayList<Course>(); 
     //... 
     //getters and setters 
} 

而且事是的,我不能簡單地刪除一個主題,因爲它有關係。 我的意思是,當我刪除一個主題時,所有具有該主題的課程也必須刪除。而且,如果課程被刪除,那麼「屬於」該課程的主題應該存在。而且等級和課程也是如此。

我的解決方案(暫時)是: 刪除主題的方法,在刪除主題本身之前調用刪除所有具有該主題的課程的方法。

但我確定這不是正確的方法。我知道CascadeType應該可以解決這個問題,但是我不知道在哪個時間使用哪個。

現在我們談論的是Hibernate,所有的關係應該是雙向的嗎?

回答

0

課程實體被3個實體引用,並不總是擁有方。在這種情況下,你根本不應該使用級聯。在這種級聯移除之後,這種關係將處於不一致的狀態。

級聯很好,當兩個實體具有一對多關係時,但對於更多實體和多對多關係(以及多對一關係的多方) ,你必須'手動'。

+0

而且orphanRemoval = true屬性應該加 – mstzn

+0

是的!這看起來不錯。但還有另一個問題。班主任有一個屬性@ManyToMany私人清單課程;然後,我不能改變Course.class的結構;我的意思是,如果我想訪問一個教師是T的主題,我只需編寫T.getCourse()。get(0).getSubject()。getName();所以,如果我按照你說的方式改變課程,我將如何獲得教師T的科目? – Quarktum

+0

我還沒有說修改課程的任何內容(變量命名除外) - 所以老師對主題的訪問可以保持不變。 – kostja