我在 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/