CascadeType.ALL과 orphanRemoval=true를 함께 사용하는것에 대한 질문
377
작성한 질문수 20
안녕하세요
영속성 전이와 고아객체에 대해 복습하다가 궁금증이 생겨 질문 올립니다.
영속성 전이는 부모 엔티티의 생명주기에 종속적인 자식 엔티티의 상태변화를 같이 처리해주는 것으로
CascadeType.ALL 옵션은 부모 엔티티를 저장하거나 삭제, 변경 할 때, 자식 엔티티 역시 같이 저장하거나 삭제, 변경 해주는 걸로 알고 있습니다.
그리고 orphanRemoval=true 고아객체는 부모 엔티티와의 관계가 끊어지면 자동으로 삭제되는 자식 엔티티를 의미한다고 하였습니다.
여기서 궁금증이 생겼습니다.
CascadeType.ALL 를 설정하면 부모 엔티티가 자식 엔티티의 생명주기를 처리해주는데
orphanRemoval=true 을 같이 사용해 자식 엔티티가 삭제되는 것이 중복될 텐데
왜 이 두옵션을 같이 사용하는지 잘 모르겠습니다..
검색을 해봐도 두 옵션을 같이 사용하는 경우에는
부모 엔티티와 관계된 자식 엔티티의 생명주기를 부모 엔티티에서 한 번에 관리할 수 있다고 하는데
어차피 CascadeType.ALL 옵션하나로 부모 엔티티가 자식 엔티티의 생명 주기를 관리하는데
어떤 이유에서 같이 사용하는 건가요 ??
답변 1
-2
안녕하세요, 인프런 AI 인턴이에요.
CascadeType.ALL과 orphanRemoval=true는 비슷한 역할을 수행하지만, 목적이 다릅니다.
CascadeType.ALL은 부모 엔티티의 상태변화와 관계된 모든 자식 엔티티의 상태를 동시에 변경하거나 삭제하고 싶을 때 사용합니다. 반면에, orphanRemoval=true는 자식 객체와 부모 객체 간의 관계가 종료되었을 때, 자식 객체를 자동으로 삭제하고 싶을 때 사용합니다.
따라서 CascadeType.ALL과 orphanRemoval=true을 동시에 사용하면, 부모 엔티티를 삭제할 때 자식 엔티티가 모두 삭제된다는 것을 보장할 수 있습니다.
하지만, CascadeType.ALL과 orphanRemoval=true를 함께 사용하는 것이 항상 필수적인 것은 아닙니다. 각각의 상황에 맞게 옵션을 선택해야 합니다.
제가 도움을 드린 것이 실제 도움이 되셨길 바랍니다. 감사합니다.
1
흠.. GhatGPT에 물어본 결과와 똑같은데
이 답변 대로라면 CascadeType.ALL은 부모와 자식 엔티티의 영속성만을 관리하고 DB에 영향은 안주고
DB에서 자식 엔티티를 삭제하고 싶다면 orphanRemoval=true를 동시에 사용해야 한다는말인가요 ?
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
25
2
inheritance startegy 선택시 고려사항
0
22
1
Entity 동등성 비교
0
18
1
실무 조언 관련 질문입니다.
0
46
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
52
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
52
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
93
2
UnsupportedOperationException 발생
0
86
3
H2 Database 연결이 안됩니다.
0
92
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
107
2
persistence.xml
0
106
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
66
1
JPA 프록시
0
95
1
Native Query와 MyBatis
0
68
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
85
1
임베디드 타입 예시 코드 관련 질문
0
114
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
94
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
144
1





