반응형
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 |
댓글