JPA Spring数据级联删除了多对多关系

时间:2017-08-05 22:27:34

标签: java spring hibernate jpa

我遗漏了有关JPA级联删除的内容 - 我真的很感激这里的指针。

我有一个简化这个问题的模型,有三种类型:

  • 拥有一切的用户
  • 用户可以拥有多个群组
  • 用户可以拥有多个主题
  • 主题可以添加到许多组中。

  • 如果删除了用户,则会删除所有组和主题

  • 如果某个组已删除,则会从该组中删除主题但不会删除
  • 如果删除主题,则会从组和用户中删除主题,但用户和组仍然

所以我只是按照弹簧数据文档尝试不同的Cascade,而不是得到我正在描述的结果。我的Cascades错了 - 目前如果我删除一个主题,组和用户被删除,所以索引是双向的,这不是我想要的。

用户:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "owner")
private Set<Topic> topics;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "owner")
private Set<Group> groups;

组:

@ManyToMany(cascade = {CascadeType.PERSIST})
private Set<Topic> topics;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="user_id")
@OneToOne(mappedBy = "owner", cascade = CascadeType.ALL)
private User owner;

主题

@ManyToMany(mappedBy = "topics")
private Set<EntityGroup> groups;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="user_id")
@OneToOne(mappedBy = "owner", cascade = CascadeType.ALL)
private User owner;

1 个答案:

答案 0 :(得分:0)

我遗失的东西,现在看来很明显,就是不在子对象上包含级联值。在这样做时,我告诉JPA级联删除到父级。