2016-12-02 57 views
0

我有Person和Group表之間的多對多關係,連接表是PersonGroup。當我保存/刪除人員時,它將保存並從Person, PersonGroup and Group表中刪除。多對多 - 保存/更新連接表和一張表

我只是想刪除/從「人」和「PersonGroup」表保存並退出Group table untouched. 而上查詢「人」,我應該得到的人物實體「集團」之列。

所以基本上「Group」是一個參考表。只能從組表中讀取,不能刪除/更新。

我該如何做到這一點?

@Entity 
@Table(name="Person") 
public class Person implements Serializable { 
    @Id  
    private long personId; 

    @ManyToMany(cascade=CascadeType.ALL) 
    @JoinTable(name="PersonGroup", [email protected](name="person_id"), 
    [email protected](name="group_id")) 
    private List<Group> groups; 

    } 


@Entity 
@Table(name="Group") 
public class Group implements Serializable { 
    @Id 
    private long groupId; 

    @ManyToMany(mappedBy="groups") 
    private List<Person> persons; 

} 

回答

0

級聯意味着如果您插入,更新或刪除對象,相關對象也會被插入,更新或刪除。

如果您想要在保存/刪除/更新Person時保留Group表,請從@ManyToMany註釋中刪除cascade=CascadeType.ALL屬性。

嘗試以下操作:

@Entity 
@Table(name="Person") 
public class Person implements Serializable { 
    @Id  
    private long personId; 

    @ManyToMany(targetEntity = Group.class, mappedBy="persons") 
    private List<Group> groups; 

} 


@Entity 
@Table(name="Group") 
public class Group implements Serializable { 
    @Id 
    private long groupId; 

    @ManyToMany(targetEntity = Person.class) 
    @JoinTable(name="PersonGroup", 
     [email protected](name="person_id"), 
     [email protected](name="group_id")) 
    private List<Person> persons; 

} 
+0

Removeing的cascadetyp.all不將其保存在組表,但它也沒有將其保存在連接表'PersonGroup' – Nero

+0

的mappedBy的Javadoc是一個有點誤導... 你應該映射你的連接表的一側,不「擁有」的關係,並使用mappedBy在「擁有」的關係一側... 現在的方式,我想冬眠會如果您保存了Group對象,則更新連接表... 我將編輯我的答案addre那個 –