如何从非所有者方面使用Hibernate从@ManyToMany关联中删除关系?

时间:2015-09-30 14:19:22

标签: java hibernate jpa cascade

我有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从所有者方删除关系。我会尝试找到最简单的方法

1 个答案:

答案 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)并更新其成员资格。