영속성 전이 (CASCADE)
- 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영토 상태로 만들고 싶을 때 사용
- ex) Team객체를 만들고 memberList를 세팅한 뒤, Team만 persist하면 Member까지 모두 저장
- 주의 사항
- 영속성 전이는 연관관계 매핑과 관련이 없다. (혼동 불가)
- 단지! 엔티티 영속 편의 옵션일뿐이다.
- 하나의 부모만 자식을 관리할 때 | 소유자가 1개 일 때 | 단일 종속 (다른 곳에서 참조 X)
- 단일 소유자 AND 라이프 사이클 동일
- 게시판, 게시글의 첨부파일 등
- 영속성 전이는 연관관계 매핑과 관련이 없다. (혼동 불가)
- 종류 CascadeType.
- ALL : 모두 적용
- PERSIST: 영속
- REMOVE: 삭제
- MERGE
- REFRESH
- DETACH
고아 객체
- 부모 엔티티와 연관 관계가 끊어진 자식 엔티티
- 고아 객체 제거
- orphanRemoval = true
- @OneToOne, @OneToMany만 가능
- CASCADE와 같이 특정 엔티티에 단일 종속적일 때 사용 가능
- 부모를 제거할 때 자식도 함께 제거가 되는 기능은 CascadeType.Remove 와 같이 동작
- 두 옵션을 모두 활성화 할 시 부모 엔티티를 통해서 자식의 생명 주기 관리 가능
- 도메인 주도 설계(DDD)의 Aggregate Root 개념을 구현할 때 유용
- 레파지토리는 Aggregate Root만 참조하고 나머지는 만들지 않는다는 개념
- Aggregate Root가 Parent
try {
Parent parent = new Parent();
Child child1 = new Child();
Child child2 = new Child();
parent.addChild(child1);
parent.addChild(child2);
em.persist(parent);
/* CASCADE로 parent만 저장해도 child자동 저장
em.persist(child1);
em.persist(child2);
*/
em.flush();
em.clear();
Parent findParent = em.find(Parent.class, parent.getId());
findParent.getChildList().remove(0); //orphanRemoval = true
em.remove(findParent); // orphanRemoval = true, CascadeType.REMOVE 동일
tx.commit();
}catch(Exception e){ ... } finally{ ... }
출처 관련 : https://tan-sog.tistory.com/90
'DB > JPA' 카테고리의 다른 글
[JPA] 객체지향 쿼리 언어 (1) | 2025.02.27 |
---|---|
[JPA] 값 타입 (0) | 2025.02.25 |
[JPA] 즉시 로딩과 지연 로딩 (0) | 2025.02.22 |
[JPA] 프록시 (0) | 2025.02.22 |
[JPA] 상속관계 매핑 (0) | 2025.02.10 |