删除具有多对多关系的实体时的外键约束

时间:2019-03-25 17:12:58

标签: hibernate spring-boot jpa spring-data-jpa h2

我有两个实体:

  @Data
  @Entity
  @Table(name = "tags")
  public static class Tag {
    public abstract class BaseEntity extends AutoUpdatable {
      @Id
      @Column(unique = true, nullable = false)
      @GeneratedValue(strategy = GenerationType.AUTO)
      private UUID id;

      @ManyToMany(mappedBy = "tags")
      private List<Article> articles;
  }

  @Data
  @Entity
  @Table(name = "articles")
  public static class Article {
    @Id
    @Column(unique = true, nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID id;

    @ManyToMany
    @JoinTable(
        name = "articles_tags",
        joinColumns = @JoinColumn(name = "article_id"),
        inverseJoinColumns = @JoinColumn(name = "tag_id")
    )
    private List<Tag> tags;
  }

删除标签时,我所需要的只是将其也从商品实体中标签的集合中删除。 我需要通过spring数据jpa实现它。 我使用的是最新版本的spring boot和h2数据库。

这是一种优雅的方法吗?

1 个答案:

答案 0 :(得分:0)

如果只想在删除时执行此操作,则可以在关系映射中使用CascadeType.REMOVE参数:

@ManyToMany(cascade = CascadeType.REMOVE)
@JoinTable(
    name = "articles_tags",
    joinColumns = @JoinColumn(name = "article_id"),
    inverseJoinColumns = @JoinColumn(name = "tag_id")
)
private List<Tag> tags;

但是,这可能会导致a number of DELETE statements并非最佳选择。