인프런 커뮤니티 질문&답변

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 전이(CASCADE)와 고아 객체

cascadeType.ALL + orphanRemoval = true 를 동시에 사용할 때

해결된 질문

작성

·

176

0

mappedby 속성은 연관관계의 주인이 1:多 관계에서 多쪽(Member엔티티쪽)이라는 것을 명시하는데

cascadeType.ALL + orphanRemoval = true 속성은 1쪽(Team엔티티쪽)에서 FK를 관리하는 느낌을 받고있습니다.

두 상반된 개념이 함께 적용되는것 같아 이해하기가 어렵습니다...

이해를 하고싶어 다음 두 예제를 비교하고 있는데요.

p.185의 예제 5.13 (mapped by)

p.309의 예제 8.17 (cascade)

사실 p.185에서 적용하지 않아도 됐던 getMembers().add(member)를 p.309에서는 Parent와 Child 관계로 getChildren().add(child)와 같이 적용하는 모양새입니다. (p.309 예제의 엔티티에도 mapped by 설정을 해줬음에도) 

답변부탁드립니다.

감사합니다.

답변 1

2

질문올리자 마자 자문자답을 한것 같습니다.

CHILD테이블의 FK키값을 무엇으로 채울 것인가는 mapped by로 설정된 Child엔티티의 Parent parent 필드이며,

em.persist( )를 여러번 호출하지 않고, 부모만 한 번 호출하면 자식엔티티도 영속화가 될 수 있도록 프로그래밍적으로 코드를 간결하게 해주는 기능이 Cascade인 것으로 이해했습니다.

[정리]

FK값의 결정을 자식(多쪽)에서 하고싶을 때 -> mapped by 

프로그래밍을 부모(1쪽)위주로 하고 싶을 때, 부모엔티티로 자식엔티티생명주기를 관리하고 싶을 떄 -> cascade

김영한님의 프로필 이미지
김영한
지식공유자

ddoddo님 정리까지 감사합니다^^

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

질문하기