특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을때 사용한다
영속성 전이를 사용하면 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 수 있다
출처 : 김영한<자바 ORM 표준 JPA 프로그래밍>
- ALL - 모두 적용
- PERSIST - 영속
- MERGE - 병합
- REMOVE - 삭제
- REFRESH
- DETACH
52market에는 cascade가 설정되어있는것이 없는데, 그것에 단점이 게시글에 댓글이 있는 상태라면 게시글이 삭제되지 않는다는 점이었다
우리는 댓글의 유무와 상관없이 게시글 작성자가 게시글을 삭제할 수 있는 상태를 원했다
먼저 단방향 매핑이되어있던 게시글-댓글 관계를 양방향으로 매핑해주었다
cascade는 부모객체에 지정해주어야 하기 때문에 @OneToMany를 사용해주고 CascadeType.ALL 로 지정해주었다
게시글은 댓글의 리스트를 가지고 있고 댓글이 작성되면 리스트에 add해주는 로직을 구현였다
먼저 게시글 엔티티의 코드를 보자면
@OneToMany(mappedBy = "article",
fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
private List<Comment> commentList = new ArrayList<>();
public void addComment(Comment comment) {
this.commentList.add(comment);
}
CommentService에서 addComment를 실행해주었다
게시글 하위에 댓글이 있어도 삭제가 가능해졌고 db에서도 잘 사라지는걸 확인 할 수있었다😆