inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lập trình JPA tiêu chuẩn Java ORM - Cơ bản

CASCADE và Đối tượng mồ côi

연관관계 메서드 호출 / 미호출 차이점

272

dmdmk

69 câu hỏi đã được viết

0

안녕하세요 영한님 강의 중 궁금한 점이 생겨 질문드립니다.

cascade 사용 시 연관관계 메서드 호출없이 persist(parent)를 호출하면  child에 값이 들어가지 않는데 어떤 이유 때문인지 궁금합니다.

cascade를 쓰지않고 각각 persist(parent), persist(child)로 할 때는 db에 값이 잘 들어가네요 ..ㅠㅠ

Parent parent = new Parent();
parent.setName("부모");

Child child = new Child();
child.setName("자식");
child.setParent(parent);

//parent.addChild(child);
em.persist(parent);

java JPA

Câu trả lời 2

1

OMG

안녕하세요. 에러나면짖는개님, 공식 서포터즈 OMG입니다.

연관관계를 맺는다는 것은 "내가 너를 알게한다" 라고 설명할 수 있을 거같아요.

 

Parent parent = new Parent();
parent.setName("부모");

Child child = new Child();
child.setName("자식");
child.setParent(parent);

 

여기 까지의 코드를 보면, 부모가 생성되고 자식이 생성되었습니다. 자식은 부모가 누군지 알지만, 부모는 자식이 누군지 모릅니다.

//parent.addChild(child);
em.persist(parent);

 

 

그리고 나서 부모를 영속상태로 만들지만 위에서 말씀드렸던것처럼 부모는 자식이 누군지 모릅니다.

부모가 자식이 누군지 알게 하기위해 parant.addChild(child);를 지정한 것이겠죠 ?

주석을 풀고 확인해보시면 감이 오실꺼라 생각합니다.

 

감사합니다.

0

dmdmk

양방향 관계에서 cascade를 통해서 영속성 전이를 할 때는 연관관계 메서드가 반드시 필요한 건가요??

cascade를 사용하지 않고 각각 persist()를 할 때는 연관관계 메서드를 안써도 db에는 값이 저장되는데 이 부분이 궁금합니다..

이 경우에는 parent엔티티에 child는 저장되지 않겠지만 db에는 parent와 child 쿼리가 전달되서 값이 저장되지 않나요??

 

0

OMG

영속성 전이 cascade는 엔티티를 영속화 할 때 연관된 엔티티도 같이 영속화하는 편리함을 제공하는데요, 연연관계를 매핑하는 것과는 관련이 없어서 첫 질문글에서 말씀하신대로

cascade 사용 시 연관관계 메서드 호출없이 persist(parent)를 호출하면  child에 값이 들어가지 않는 것입니다.

cascade여부와 상관없이 연관관계가 맺어져 있지 않기 때문입니다.

--

cascade를 쓰지않고 각각 persist(parent), persist(child)로 할 때는 db에 값이 잘 들어가네요 ..

=>

이 부분도 parent와 child를 각각 영속상태로 만들었고 이후 트랜잭션 커밋 시점에 영속성컨텍스트의 내용이 db에 쿼리로 날아갑니다.

 

 

 

 

 

0

OMG

요약하면 다음과 같습니다.

1) 연관관계와 영속성전이는 관계가 없다. 단지 영속화할 때 연관된 엔티티도 같이 영속화하는 기능을 제공한다.

2) 연관관계가 맺어져 있지 않기 때문에 child가 저장되지 않은 것이다.

3) child와 parent를 각각 persist하여 영속화되었고 tx 커밋시점에 db에 쿼리가 날아간 것이다.

 

ps. 영한님의 JPA 책의 내용을 참고하여 답변드렸는데 강의에서도 관련되어 설명하신 부분이 있는지 확인하여 있으면 답변 드리도록하겠습니다.

=> 강의 맨 앞에서 설명하고 계시네요 ㅎㅎ;; 처음~1분 정도를 참고하시면 cascade는 연관관계 지연로딩, 즉시로딩과는 전혀 상관없다고 말씀하시는 부분이 있네요. 영한님 설명을 다시한번 듣고 오시면 이해에 도움이 되리라 생각합니다.

 

Entity 동등성 비교

0

4

1

실무 조언 관련 질문입니다.

0

41

1

H2데이터베이스 파일 생성

0

51

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

48

1

JPQL 메소드와 락

0

52

1

Delivery @OneToOne

0

57

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

89

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

88

2

연관관계 매핑 질문드립니다.

0

82

2

h2데이터베이스 실행오류

0

105

2

persistence.xml

0

103

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

90

1

Native Query와 MyBatis

0

63

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

83

1

임베디드 타입 예시 코드 관련 질문

0

112

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

90

3

인텔리제이 패키지 커서 단축키 질문

0

106

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

136

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

68

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1