2010-11-18 166 views
9

我有兩個類,說Group和Person與JoinTable中映射的ManyToMany關係。JPA /休眠:ManyToMany刪除關係

如果我刪除與組關聯的人員,我想從聯接表中刪除條目(而不是刪除組本身!)。

我該如何定義cascade-Annotations?我沒有發現一個真正有用的文檔,但幾個未解板的討論......

public class Group { 
    @ManyToMany(
     cascade = { javax.persistence.CascadeType.? }, 
     fetch = FetchType.EAGER) 
    @Cascade({CascadeType.?}) 
    @JoinTable(name = "PERSON_GROUP", 
     joinColumns = { @JoinColumn(name = "GROUP_ID") }, 
     inverseJoinColumns = { @JoinColumn(name = "PERSON_ID") }) 
    private List<Person> persons;  
} 

public class Person { 
    @ManyToMany(
     cascade = { javax.persistence.CascadeType.? }, 
     fetch = FetchType.EAGER, 
     mappedBy = "persons", 
     targetEntity = Group.class) 
    @Cascade({CascadeType.?}) 
    private List<Group> group; 
} 

回答

0

我相信你想要的是:

cascade = CascadeType.ALL 

要刪除DB關係,從每個組中刪除的關聯。從Group.persons集合中刪除此人,並從Person.group集合中刪除該組,然後保留您的人員對象。

+0

我想在刪除人物對象時自動刪除關聯。我的意圖是不必手動執行此操作。如果必須,我不需要級聯。還是我的Cascading-feature錯誤? – tautologe 2010-11-19 00:10:56

+0

你必須。級聯不這樣做。 – 2010-11-19 04:00:49

3

級聯不會清除剩餘的引用到保留在內存中的Group對象上的已刪除的Person。你必須手動完成。似乎級聯應該這樣做,但可悲的是,這不是它的工作方式。

根據您提問中提供的信息,我不認爲您需要在您的PersonGroup實體上設置任何級聯選項。聽起來不像他們分享父母/子女關係,而一個人的存在取決於另一個。這是我期望看到一些級聯選項的那種關係。

+0

嗯好的,謝謝。順便說一句。在哪裏有一個可用的級聯文檔,以及如何以合理的方式組合jpa和hibernate註釋? – tautologe 2010-11-20 22:09:51

+0

我使用Hibernate作爲提供者,但我只通過JPA接口與它交互。我不是回答有關Hibernate特定註釋問題的合適人選。抱歉。 – 2010-11-21 15:05:14

0

你可以專門做一個數據庫(取決於你的數據庫和它的能力)。通過在關係表的外鍵上添加「刪除級聯」。