I have three entities, Bag, Item and Category. One Bag can have Many Items and Many Items can have Many Categories:
Bag <----OneToMany----> Item
Item -----ManyToMany-----> Category
It isn't necessary store items in Category
When I try delete a Item without categories, there isn't any error message, but the Item isn't deleted. However if i try delete the same item in DataBase, it is deleted successfully.
On the other hand, if i try delete a Item with categories, i receive this error message:
"Cannot delete or update a parent row: a foreign key constraint fails (item_categories, CONSTRAINT fk_item_categories_items_id FOREIGN KEY (items_id) REFERENCES item (id))".
I would like delete the item and the relation with his categories, but keep categories. How could I do this?
For the first problem, I have tried add to the delete method bag.removeItems(item), but it only deletes tthe relationship between both and the item continues in DB.
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();
}
EDIT: The methods of create and update works fine.