У меня есть три сущности, Bag
, Item
и Category
.Один Bag
может иметь множество Items
, а многие Items
могут иметь множество Categories
:
Bag
<---- <code>OneToMany ----> Item
Item
----- ManyToMany
-----> Category
Нет необходимости хранить items
в Category
Когда яПопробуйте удалить Item
без categories
, сообщения об ошибке нет, но Item
не удалено.Однако, если я пытаюсь удалить тот же item
в базе данных, он удаляется успешно.
С другой стороны, если я пытаюсь удалить Item
с categories
, я получаю это сообщение об ошибке:
"Невозможно удалить или обновить родительскую строку: сбой ограничения внешнего ключа (item_categories
, CONSTRAINT fk_item_categories_items_id
FOREIGN KEY (items_id
) ССЫЛКИ item
(id
))".
Я бы хотел удалить item
и связь с его categories
, но сохранить categories
.Как я мог это сделать?
Для первой проблемы я попытался добавить к методу удаления bag.removeItems(item)
, но он только удаляет связь между обоими, и item
продолжается в БД.
Bag.java
@OneToMany(mappedBy = "bag", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JsonIgnoreProperties("bag")
private Set<Item> items = new HashSet<>();
Item.java
@ManyToOne
@JsonIgnoreProperties("items")
private Bag bag;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "item_categories",
joinColumns = @JoinColumn(name="items_id", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name="categories_id", referencedColumnName="id"))
private Set<Category> categories = new HashSet<>();
ItemResource.java
@DeleteMapping("/items/{id}")
@Timed
public ResponseEntity<Void> deleteItem(@PathVariable Long id) {
itemRepository.delete(id);
return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build();
}
РЕДАКТИРОВАТЬ: Методы создания и обновления отлично работает.