본문 바로가기
Tech/JPA

[JPA] 영속성의 전이 (cascade)

by 싱브이 2024. 4. 15.
728x90
반응형

 

Board(상위 엔티티)와 BoardImage(하위 엔티티) 저장은 영속성의 전이이다. BoardImage 객체가 JPA에 의해서 관리되면 BoardImage를 찹조하고 있는 Board 객체도 같이 처리되어야 한다.

 


영속성의 전이(cascade)란?

 

상위 엔티티와 하위 엔티티의 연관 관계를 상위 엔티티에서 관리하는 경우에 신경써야 하는 것이 있다. 바로 상위 엔티티 객체의 상태가 변경되었을 때 하위 엔티티 객체들 역시 같이 영향을 받는다는 것이다. 이걸 JPA에서는 영속성의 전이라고 표현한다. 

JPA에서는 이런 경우 연관 관계에 cascade 속성을 부여해서 제어하도록 한다.

 

cascade 속성 값 내용
PERIST
REMOVE
상위 엔티티가 영속 처리될 때 하위 엔티티들도 같이 영속 처리됨
MERGE
REFRESH
DETACH
상위 엔티티의 상태가 변경될 때 하위 엔티티들도 같이 상태 변경됨 
ALL 상위 엔티티의 모든 상태 변경이 하위 엔티티에도 적용됨

 

 


내가 적용한

BoardImage는 Board가 저장될 때 같이 저장되어여 하는 객체이므로 상위 엔티티(Board)에서 하위 엔티티 객체를 관리하는 기능을 추가하였다. 

    . . .
    @OneToMany(mappedBy = "board",
    cascade = {CascadeType.ALL},
    fetch = FetchType.LAZY,
    orphanRemoval = true)
    @Builder.Default
    private Set<BoardImage> imageSet = new HashSet<>();
    . . .
    }

 

 

  • cascade = {CascadeType.All} : Board 객체의 모든 상태 변화에 BoardImage 객체들도 변경됨
  • orphanRemoval : cascade를 통해 상태에만 영향을 준 것을 삭제까지 이루어주게 함

 

결과

테스트 코드로 게시글 하나에 3개의 첨부파일을 추가하는 경우

728x90
반응형

댓글