영속성 전이 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
반응형
'개발공부 > JAVA Spring' 카테고리의 다른 글
객체지향 패러다임 (0) | 2023.04.12 |
---|---|
[Spring Boot] 예외처리 (0) | 2023.03.28 |
[Spring Boot] JPA Auditing (0) | 2023.03.11 |
[Spring Boot] JPQL, QueryDSL 쿼리 작성 (0) | 2023.03.10 |
[Spring Boot] Redis config (0) | 2023.03.10 |
댓글