프로젝트에서 하나의 엔티티를 삭제했을 때 이 엔티티와 연관된 다른 엔티티는 어떻게 될까? 나는 게시글을 삭제하였을때 댓글까지 삭제 한다는걸 생각하지 못하였다. Post(게시글)테이블에서 Comment(댓글)테이블을 참조 받고 있었는데 조회 하거나 수정하거나 할때는 오류가 나지 않았다. 하지만 게시글 삭제 API를 만들고 테스트를 하던도중 오류가 발생했다.
Post Table
ID | title | conents | member_id | comment_id |
---|
ID | comment | post_id | member_id |
---|
게시글 테이블에서는 멤버를 MnayToOne, 댓글을 OneToMany 로 참조 받고 있다. 여기서 Post테이블에서 게시글을 삭제 하였을때 그에 해당하는 댓글을 고려하지 않고 삭제해서 외래 키 무결성 에러가 발생했었다.
@OneToMany(mappedBy = "post", orphanRemoval = true)
private List<Comment> comment;
위와 같이 orphanRemoval = true를 설정해주면 된다. 이렇게 하면 User를 삭제할 시 연관관계가 있는 Article들도 같이 삭제된다. 삭제 순서는 외래 키 제약 조건을 고려해서 자식을 먼저 삭제하고 부모를 삭제한다.