【问题标题】:Foreign key constraint when deleting entity with many to many relationship删除具有多对多关系的实体时的外键约束
【发布时间】:2019-08-16 00:15:49
【问题描述】:

我有两个实体:

  @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 data jpa 来实现它。 我用的是最新版的spring boot和h2数据库。

这是一种优雅的方式吗?

【问题讨论】:

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


    【解决方案1】:

    如果您只想在删除时执行此操作,您可以在关系映射中使用 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 可能不是最佳的。

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多