개발공부/JAVA Spring
[Spring Boot] JPA 영속성 전이 cascade, 고아객체
bzerome240
2023. 3. 27. 20:23
영속성 전이 cascade
: 특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것
영속성 전이 타입의 종류
- ALL : 모든 영속 상태 변경에 대해 영속성 전이 적용
- PERSIST : 엔티티가 영속화할 때 연관된 엔티티도 함께 영속화
- MERGE : 엔티티를 영속성 컨텍스트에 병합할 때 연관된 엔티티도 병합
- REMOVE : 엔티티를 제거할 때 연관된 엔티티도 제거
- REFRESH : 엔티티를 새로고침할 때 연관된 엔티티도 새로고침
- DETACH : 엔티티를 영속성 컨텍스트에서 제외하면 연관된 엔티티도 제외
엔티티 생명주기와 연관이 있다.
한 엔티티가 영속 상태의 변경이 일어나면 매핑으로 연관된 엔티티에도 동일한 동작이 일어나도록 전이를 발생시킨다.
주의할 점
ALL 타입 무분별 사용 시 REMOVE 가 포함되어있어 의도치 않게 모두 삭제될 수 있으므로 사이드이펙트를 조심해야한다.
영속성 전이 적용
@OneToMany(mappedBy = "provider", cascade = CascadeType.PERSIST)
@ToString.Exclude
private List<Product> productList = new ArrayList<>();
고아 객체 ORPHAN
: 부모 엔티티와 연관관계가 끊어진 엔티티
JPA에는 고아객체를 자동으로 제거하는 기능이 있다.
고아 객체 제거하기
@OneToMany(mappedBy = "provider", cascade = CascadeType.PERSIST, orphanRemoval = true)
@ToString.Exclude
private List<Product> productList = new ArrayList<>();
728x90
반응형