Ограничение внешнего ключа при удалении объекта со многими отношениями - PullRequest
0 голосов
/ 25 марта 2019

У меня есть две сущности:

  @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;
  }

Все, что мне нужно, это при удалении тега - удалить его также из коллекции тегов в сущности статьи.Мне нужно реализовать это через весенние данные JPA.Я использую последнюю версию весенней загрузки и базу данных h2.

Это элегантный способ сделать это?

1 Ответ

0 голосов
/ 25 марта 2019

Если вы хотите сделать это только при удалении, вы можете использовать параметр CascadeType.REMOVE в вашем отображении отношений:

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

Однако это может привести к числуУДАЛИТЬ операторы , которые могут быть неоптимальными.

...