Вопрос
Можно ли удалить строку в объединяющей таблице, созданной аннотацией @ManyToMany?
Context
С этой схемой:
- TAG
- TAGS_ARTICLES
- ARTICLE
Когда тег удаляется из public Set<Tag> tags
(aсписок в ARTICLE
классе) также удаляются соответствующие строки в TAGS_ARTICLES
, но не тег в таблице TAG
.
Единственный способ - создать сценарий SQL или JPA / Hibernate, позволяющий нам сделатьчто с аннотациями?
Код
Мой текущий код: article.getTags().remove(tag);
Эта строка удаляет тег из списка, но изменениене сделано в базе данных.
Заключение
Я видел этот пост: Как удалить строку в объединяемой таблице с JPA , но относительный тег долженбыть удаленным тоже (не мой случай).
Спасибо.
Редактировать 1: Ожидаемый результат в базе данных
До удаления
ARTICLE
| article_id |
| a1 |
| a2 |
| a3 |
TAGS_ARTICLES
| article_id | tag_id |
| a1 | t1 |
| a1 | t2 |
| a2 | t2 |
TAG
| article_id |
| t1 |
| t2 |
После удаления t1 из списка тегов a1
ARTICLE
| article_id |
| a1 |
| a2 |
| a3 |
TAGS_ARTICLES
| article_id | tag_id |
| a2 | t1 |
| a2 | t2 |
TAG
| article_id |
| t1 |
| t2 |
Редактировать 2: Присоединить код таблицы
@Entity
public class Article {
...
@ManyToMany
@JoinTable(name = "tags_articles",
joinColumns = @JoinColumn(name = "idarticle"),
inverseJoinColumns = @JoinColumn(name = "idtag")
)
private Set<Tag> tags = new HashSet<>();
...
}