Spring JPA ManyToOne deletion handle

Viewed 52

I have two POJOs, one is for Post which is below

@Entity
public class Post {
    ...
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "category_id")
    private Category category;
    ...
}

and another one is for Category as below

@Entity(name = "category")
public class Category {
    ...
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "category", cascade = CascadeType.ALL)
    @JsonIgnore
    private List<Post> post;
    ...
}

I have two crud repositories for each class. And here is my issue. GET, POST, PUT is working as expected. But for DELETE it is creating the issue. Suppose POST A has Category type C. When I am trying to delete POST A it is not only deleting POST A itself also deleting Category C and all Posts related to Category C.

Please help :)

1 Answers

The problem is in the CascadeType, of the Post side. CascadeType.ALL includes CascadeType.REMOVE, so when you delete a post, the category to which that post belongs will be removed as well. Retain only CascadeType.ALL on the Category side and remove it from Post.

Related