2016-12-02 55 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那个 –