본문 바로가기
  • 실행력이 모든걸 결정한다
Spring 사전 준비/JPA Hibernate

[JPA] CASCADE 기능

by 김코더 김주역 2022. 8. 3.
반응형

JPA에서 엔티티를 저장할 때 모든 연관 엔티티는 영속 상태로 지정되어 있어야 한다. JPA에서는 이런 번거로움을 위해 부모만 영속 상태로 만들면 연관 엔티티까지 한 번에 영속 상태로 만드는 CASCADE 기능을 제공한다. 

 

 

1. 영속성 전이

1) 영속성 전이란?

- 부모의 영속 상태를 연관(자식) 엔티티까지 한 번에 적용하는 기능

 

 

2) 설정법

- 다음과 같이 엔티티에서 매핑 어노테이션의 cascade 속성을 이용하면 된다.

@OneToMany(..., cascade=CascadeType.PERSIST) // cascade={...}와 같이 중괄호를 활용하여 여러 속성을 같이 사용할 수도 있다.
private List<Child> children = new ArrayList<Child>();

- CASCADE의 종류는 다음과 같다.

  • CascadeType.PERSIST : 연결된 하위 엔티티까지 영속
  • CascadeType.MERGE : 연결된 하위 엔티티까지 병합
  • CascadeType.REMOVE : 연결된 하위 엔티티까지 삭제 (DB에서 삭제됨)
  • CascadeType.REFRESH : 연결된 하위 엔티티까지 새로고침
  • CascadeType.DETACH : 연결된 하위 엔티티까지 영속성 제거 (DB에서 삭제되지 않음)
  • CascadeType.ALL : 모두 적용

 

 

3) 영속성 전이가 일어나는 시점

- flush 호출 시

 

 

 

2. 고아 객체

1) 고아 객체란?

- 부모 엔티티와 연관관계가 끊어진 자식 엔티티

 

 

2) 고아 객체 제거 방법

- 다음과 같이 엔티티에서 매핑 어노테이션의 orphanRemoval 속성을 이용하면 된다.

@OneToMany(..., orphanRemoval=true)
private List<Child> children = new ArrayList<Child>();

 

 

3) 주의할 점

- 참조가 제거된 엔티티는 다른 곳에서 더 이상 참조하지 않는 고아 객체로 인식하기 때문에, 참조하는 곳이 하나일 때만 사용해야 한다. 즉, @OneToOne, @OneToMany에서만 사용된다.

 

 

+ 추가) CascadeType.ALL과 orphanRemoval=true를 동시에 적용하면 완전히 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있게 된다.

 

 

 

● 참고자료 : 자바 ORM 표준 JPA 프로그래밍

 

반응형

'Spring 사전 준비 > JPA Hibernate' 카테고리의 다른 글

[JPA] 값 타입 컬렉션  (0) 2022.08.03
[JPA] 복합 값 타입과 불변 객체  (0) 2022.08.03
[JPA] 즉시 로딩과 지연 로딩  (0) 2022.08.01
[JPA] 프록시 객체  (0) 2022.08.01
[JPA] 고급 매핑 기술  (0) 2022.07.28

댓글