This question has been asked in many forms here but none of the solutions seem to work for me. I\'m trying to delete the parent entity and I want all of the child entities to al
According to your schema, item
and item_category
has a one-to-many relationship meaning an item can have/be-assigned-to different categories but different items cannot have/be-assigned-to the same category.
That is totally fine if it is indeed your business requirement, I mention it because it does not make sense to me and this circumstance rarely happens.
If what you want is that a category can have multiple items and vice versa, item
and item_category
must be a many-to-many relationship. There should be a join table additionally.
ItemCategory
is the owner of the relationship because it has a foreign key item_id
refering to item
table. So the ItemCategoy should look roughly like this:
@Entity
@Table(name = "item_category")
public class ItemCategory {
@Id
private Integer categoryId;
private Store store;
@ManyToOne
@JoinColumn(name="item_id", /*cascade = ...*/)
private Item item;
private String categoryName;
/* Getters and Setters */
}
Your Item
entity will be roughly like this:
@Entity
@Table(name = "item", catalog = "myshchema")
public class Item implements java.io.Serializable {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true, mappedBy="item")
private Set categories; //`mappedBy`used here because this entity is not the owner of the relationship according to what mentioned above
/* Getters and Setters and other fields*/
}
To remove all the child entities(ItemCategory
) from Item
, simply
em.remove(item);
The orphanRemoval
is true
, deleting the parent, the children will be deleted as well.