20211221 TIL - CASCADE를 정의해보자

JIHYE·2021년 12월 22일
0
post-thumbnail

52market project

cascade(영속성 전이)

특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을때 사용한다
영속성 전이를 사용하면 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 수 있다
출처 : 김영한<자바 ORM 표준 JPA 프로그래밍>

cascade의 종류

  • 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에서도 잘 사라지는걸 확인 할 수있었다😆

profile
초보개발자의 개발일기

0개의 댓글