【问题标题】:Many to many - save/update in joining table and one table only多对多 - 仅在连接表和一张表中保存/更新
【发布时间】:2017-04-17 19:14:35
【问题描述】:

我在 Person 和 Group 表之间有多对多的关系,连接表是 PersonGroup。当我保存/删除 Person 时,它会从 Person, PersonGroup and Group 表中保存和删除。

我只想从“Person”和“PersonGroup”表中删除/保存并离开Group table untouched. 在查询“Person”时,我应该在 Person 实体中获得“Group”列表。

所以基本上“组”是一个参考表。它只能从 Group 表中读取,不能删除/更新。

我怎样才能做到这一点?

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

    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name="PersonGroup", joinColumns=@JoinColumn(name="person_id"), 
    inverseJoinColumns=@JoinColumn(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;

}

【问题讨论】:

    标签: java database hibernate jpa many-to-many


    【解决方案1】:

    级联意味着如果你插入、更新或删除一个对象,相关的对象也会被插入、更新或删除。

    如果您想在保存/删除/更新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",
            joinColumns=@JoinColumn(name="person_id"), 
            inverseJoinColumns=@JoinColumn(name="group_id"))
        private List<Person> persons;
    
    }
    

    【讨论】:

    • 删除 cascadetyp.all 不会将其保存在 Group 表中,但也不会将其保存在加入表中 PersonGroup
    • mappedBy 的 javadoc 有点误导......您应该将连接表映射到不“拥有”关系的一侧,并在“拥有”关系的一侧使用 mappedBy。 ..现在的情况,我认为如果您保存了 Group 对象,休眠将更新可连接对象...我将编辑我的答案以解决该问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2012-04-08
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多