본문 바로가기
개발공부/JAVA Spring

[Spring Boot] JPA 영속성 전이 cascade, 고아객체

by bzerome240 2023. 3. 27.

 

영속성 전이 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

댓글