2012-12-21 131 views
0

我有點困惑,因爲我不能強制Hibernate刪除連接表中的行。可能我需要配置不同的東西。強制Hibernate刪除連接表的行

我有一個表組件和任務和一個表連接他們Component_Tasks。在我的課組件我有:

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "Component_Tasks", 
      joinColumns = @JoinColumn(name = "ComponentID"), inverseJoinColumns = @JoinColumn(name = "TaskID")) 
public List<Task> getTasks() { 
    return tasks; 
} 

,並在我的課任務我有

@ManyToOne 
@JoinColumn(name = "ComponentID") 
public Component getComponent() { 
    return component; 
} 

我要的是,當我刪除了一個任務,我在默認情況下刪除該下劃線行的Component_Tasks表。基本上我刪除失敗的原因爲外鍵關係

ALTER TABLE Component_Tasks ADD FOREIGN KEY (TASKID) REFERENCES Tasks (ID); 

我相信我也能達到同樣的行爲,如果我在任務設置的組件爲空,然後我保存的對象,然後嘗試將其刪除。但我希望Hibernate默認這樣做。

有什麼建議嗎?

回答

0

你的映射是錯誤的。在Component中,你是說組件和任務之間的關聯由連接表映射。

而在任務中,您是說同一關聯由任務表中的連接列映射。

決定你的想法。如果該協會是一個一對多的雙向關聯,連接表,通常是沒有必要的,你只需要

@OneToMany(cascade = CascadeType.ALL, mappedBy = "component") 
public List<Task> getTasks() { 
    return tasks; 
} 

@ManyToOne 
@JoinColumn(name = "ComponentID") 
public Component getComponent() { 
    return component; 
}