티스토리 뷰
엔티티 A와 B가 영속관계에 있을 때 A를 영속화시켰을 때 자동으로 B까지 영속화시키려면 CASCADE를 사용해야 합니다. 사용방법에 대해서 알아보겠습니다.
CASCADE란?
CASCADE란 영속성 전이라고 합니다. 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용합니다.
JPA는 CASCADE 옵션을 제공하여 em.persist()를 사용하지 않아도 엔티티를 영속화시킬 수 있습니다.
CASCADE의 옵션은 다음과 같습니다.
- ALL, 아래에 있는 모든 옵션 적용
- PERSIST, 특정 엔티티 영속화
- MERGE, 병합
- REMOVE, 삭제
- REFRESH
- DETACH
연관관계에 있는 Entity 영속화, Cascade.PERSIST
A엔티티를 영속화시킬 때 연관관계에 있는 B엔티티를 자동으로 영속화시키기 위해서는 CASCADE이 제공하는 PERSIST 옵션을 사용해야 합니다.
영속 관계
- Member - View
- Board - View
- Member - Board
Member
Cascade.PERSIST
Board
Cascade.PERSIST
View
영속화
- View Entity 생성 -> 영속화 상태 X
- Board Entity 생성 -> 영속화 상태 X
- Member Entity 생성 -> 영속화 상태 X
- 연관관계 맺어주기
- View - Member
- View - Board
- Board - Member
- Member Entity 영속화
DB
Member Entity만 영속화시켰음에도 Board와 View 엔티티까지 자동으로 영속화되었습니다. CASCADE 기능을 통해 연관관계로 맺어져 있는 Entity를 영속화시키지 않아도 자동으로 영속화되었습니다.
연관관계에 있는 Entity 제거, CascadeType.REMOVE
특정 Entity를 제거할 때 연관관계에 있는 Entity를 같이 제거하려면 CASCADE 기능 중에 REMOVE 옵션을 사용해야 합니다.
Member
Cascade.PERSIST, Cascade.REMOVE
Board
Cascade.PERSIST, Cascade.REMOVE
View
Code
Member 엔티티가 아래와 같이 Board, View 엔티티와 연관관계에 있습니다.
- Member - Board
- Member - View
Cascade.PERSIST 사용하여 Member 엔티티를 저장할 때 Board와 View 엔티티가 같이 저장되도록 하였습니다. 그 결과는 위에서 설명한 DB를 확인하면 됩니다.
이후 Cascade.REMOVE 옵션을 사용하는 Member 엔티티를 제거를 하였습니다. REMOVE 옵션을 사용하면 Entity를 제거할 때 연관관계에 있는 Entity를 같이 제거하게 됩니다.
DB
결론
Cascade.PERSIST : 연관관계에 있는 Entity 추가로 저장(영속화)
Cascade.REMOVE : 연관관계에 있는 Entity 추가로 제거