java - 多对多 - 仅在连接表和一张表中保存/更新

标签 java database hibernate jpa many-to-many

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

我只想从“Person”和“PersonGroup”表中删除/保存,并保持Group 表不变。 在查询“Person”时,我应该在 Person 实体中获取“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;

}

最佳答案

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

如果您想在保存/删除/更新Person时保持Group表不变,只需删除cascade=CascadeType.ALL属性来自 @ManyToMany 注释。

尝试以下操作:

@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;

}

关于java - 多对多 - 仅在连接表和一张表中保存/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40939621/

相关文章:

java - BouncyCaSTLe PGP 和 McAfee eBusiness Server 8.6 不兼容

mysql - 什么是平面物体?

java - 仅当通过 JAX-RS 调用时才出现 Hibernate 错误

java - 如何修复Spring数据中的 'ERROR: Incorrect DATETIME value: %%'?

java - Spring Data JPA @ManyToMany 增删改查

java - 未找到 Android NDK 版本构建方法

java - GWT - 从 FormPanel 上传文件后返回对象吗?

java - 从 backbean JSF 更新 Javascript 源

php - Laravel - 我应该存储模型结果以避免多个数据库查询吗?

sql - InnoDB 表从固定长度的行中获益多少?