2017-06-12 78 views
0

我有Workpackage s和Project s之間的@ManyToOne關係。一個項目可以有一個到多個工作包。ManyToOne關係上的級聯刪除

Workpackage實體是指Project一個像這樣的:

@NotNull 
@ManyToOne(targetEntity = ProjectEntity.class) 
private ProjectEntity project; 

因此,在我的Workpackage表中的每一行引用了某個項目的id

但是,當我嘗試刪除一個項目,我得到一個外鍵約束(這是有道理的,因爲我的工作包取決於一個項目,並應刪除之前刪除前)。

但是cascade = CascadeType.REMOVE將不起作用,因爲我正在刪除我的項目,而不是我的Workpackage。在刪除某個項目時,是否有辦法刪除與某個項目相關的Workpackage

作爲Hibernate的新手,除了經歷每個Workpackage並逐一刪除它們外,沒有任何明顯的想法出現。

+0

**明確刪除**可選項,http://www.objectdb.com/java/jpa/persistence/delete –

回答

0

ON DELETE CASCADE:如果刪除表項目中的項目行,引擎也會刪除相關的工作包。這可以用於在輔助表上進行自動清理。

  1. 在聲明的模式,做以下的事情

    alter table Workpackage add constraint constraintName foreign key (id) references Project(id) on delete cascade

  2. 你必須設置孩子的對象爲空明確。

    for (Workpackage child : project.getWorkpackages()) { child.setProject(null); } session.delete(OwningSide);

+0

那怎麼可以通過'Hibernate'實現?我不確定我瞭解你的兩點。 – Christopher

+0

請單獨遵循第二點在hibernate中執行此操作,在刪除項目之前,檢索所有workPackages並將Project明確設置爲null。 Hibernate確保在刪除Project時自動刪除workPackages。 – Sudhakar