sns프로젝트를 진행하면서 해당 Post가 지워지기 되면 함께 관계되어있던 댓글과 좋아요의 상태를 어떻게 해야하는가? 라는 상황이 생겼다.
이를 해결하기 위해서 영속성 전이라는 주제를 학습하게 되었다.
✅ CASCADE
- 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때
- ex) 부모 엔티티 저장 시 자식 엔티티 저장
- 영속성 전이는 연관 관계를 매핑하는 것과 아무 관련이 없음
- 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화 하는 편리함만을 제공할 뿐
Cascade 종류
CascadeType.ALL | 모두 적용 |
CascadeType.PERSIST | 영속 |
CascadeType.MERGE | 병합 |
CascadeType.REMOVE | 삭제 |
CascadeType.REFRESH | REFRESH |
CascadeType.DETACH | DETACH |
사용법
@OneToMany(mappedBy = "post", cascade = CascadeType.PERSIST)
게시물을 저장할 때 연관된 댓글도 같이 저장
@ManyToOne(mappedBy = "post", cascade = CascadeType.REMOVE)
부모를 삭제하면 연관된 자식도 삭제가됨, 즉 게시물이 지워지면 연관된 댓글, 좋아요 함께 삭제됨
✅ 고아 객체(ORPHAN)
- 고아객체 제거: 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제
- CscadeType.REMOVE 처럼 동작한다.
- @OneToOne, OneToMany만 사용 가능
- 참조하는 곳이 하나일 때 사용해야함! 즉, 특정 엔티티가 개인 소유할 때 사용
✅ CascadeType.ALL + 고아객체
- 부모객체를 통해서 자식 객체의 생명주기를 조절할 수 있음
- 도메인 주도 설계(DDD) Aggregate Root 개념을 구현할 때 유용
영속성 전이와 고아객체를 학습한 것 기반으로 SNS 프로젝트에 적용한 포스팅이다.
https://alcoholble.tistory.com/12
Reference
'코딩 > JPA' 카테고리의 다른 글
[JPA] 영속성 컨텍스트 (2) | 2023.07.17 |
---|---|
[JPA] JPA개념 및 실습 환경 셋팅 (0) | 2023.07.17 |
[JPA] Soft Delete 적용하기 (0) | 2023.01.06 |