我有2个由@ManyToMany
关联的实体。首先是关系的所有者。我需要更新第二个:从旧的关系中删除第一个并添加新的。
@Entity
public class Person {
@Id
@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@ManyToMany
@Cascade(CascadeType.SAVE_UPDATE)
private Set<Group> groups;
}
和第二
@Entity
public class Group {
@Id
@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@ManyToMany(mappedBy = "groups")
@Cascade(CascadeType.SAVE_UPDATE)
private Set<Person> person;
}
正如您所看到的,Person
是此关系中的所有者。我需要更新一些组。在输入数据中,我会收到Group
ID和Person
的ID设置,我需要将其添加到此Group
。以前我需要从此Person
中删除所有Group
(仅限此Group
,而不是完全删除)。所以我试着清除Set
个人,然后添加新人,然后坚持Group
。此外,我尝试做同样的事情,但在明确的人员之后以及在此列表中添加新人之后坚持Group
。在这两种情况下,只有新人才会添加Group
,而不会将其删除。
UPD
我知道如何做到这两点的方法:1运行本机SQL查询和2从所有者方删除关系。我会尝试找到最简单的方法
答案 0 :(得分:0)
这对SQL
来说要容易得多DELETE from Person_Group where GroupId = ? //Empty group
INSERT into Person_Group values (?,?) //Add new member
INSERT into Person_Group values (?,?) //Add new member
INSERT into Person_Group values (?,?) //Add new member
...
我建议使用这种方法。实施起来要容易得多。
Hibernate这样做是为了让所有人(包括旧组成员和新组成员)都在内存中(通过Id)并更新其成员资格。