질문드립니다.
189
작성한 질문수 33
강의 영상의 9분 45초 쯤에 양쪽(member와 team)에 다 값을 넣어야하는데 Owner인 member에만 값을 넣어도 문제는 발생한다!
라는점을 설명해주실 때 이해가 안되서 질문드립니다. 제가 나름대로 이해하기로는
new team()을 통해 팀을 만들어서 persist()를 하면 영속성컨텍스트의 1차 캐시에만 값이 존재하고 아직 sql저장소에 저장만 되어있을 뿐 실제쿼리를 안날리기떄문에 아직 DB는 안들어가있는 상태이다. 그런데 이상태에서 em.find()를 하니까 DB에서 값을 찾아오려고 해도 값이 없어서 반복문을 실행하며 System.out.print를 하려고 해도 아무값도 출력이 안되는 것이다.
저는 이렇게 이해를 하고있는데 제가 이해하고 있는부분이 맞을까요??
9분 52초 정도부터 말씀해주시는 "team에 컬렉션에 아무것도 없단말이에요 메모리 아무것도 없이 그대로 가져온 상태에요, 순수한 객체상태라고 보시면되요 그걸 그대로 가져오면 컬렉션에도 값이 없죠" 라는 말씀이 무슨 뜻인지 잘 이해가 안됩니다 슨생님... ㅜㅜ
답변 1
5
안녕하세요 LUA님^^! 좋은 질문입니다.
member -> team의 관계를 설정하고, team -> member의 관계를 설정하지 않으면? 어떻게 될까요?
em.persist(member) 를 호출하면 JPA는 member 인스턴스 객체를 현재 상태 그대로 영속성 컨텍스트에 저장합니다.
그런데 이 영속성 컨텍스트에 저장한 member 객체가 문제입니다.
member.getTeam()을 호출하면 team을 찾을 수 있는데, team.getMembers()를 호출하면 여기에는 아무것도 없는 상태입니다. 왜냐하면 양쪽을 설정하지 않고 한쪽만 설정하고 저장했기 때문입니다.
영속성 컨텍스트는 한번 저장하면 영속성 컨텍스트를 삭제하기 전까지 유지됩니다. 당연히 그 안의 객체들도 유지됩니다. 그래서 이후에 em.find(member)를 호출하면, 방금 영속성 컨텍스트에 저장해둔 그 member 인스턴스가 조회됩니다.
여기서 member.getTeam()을 호출하고, team.getMembers()를 호출하면 아무것도 없습니다.
왜냐하면 앞서 말씀드린 것 처럼 양쪽을 설정하지 않고 한쪽만 설정하고 저장했기 때문입니다!
그런데! 여기서 부터가 중요합니다.
앞서 저장 요청이 완전히 끝나고 새로운 요청이 왔을 때 새로운 영속성 컨텍스트에서 em.find(member)를 호출하면 어떻게 될까요?
새로운 영속성 컨텍스트는 member가 없기 때문에 DB에서 새로 member를 조회하고, JPA가 member 객체를 생성합니다.
그리고! JPA가 member 객체를 생성할 때, 연관관계 매핑이 되어 있기 때문에 member.getTeam()은 물론이고, team.getMembers() 모두 값을 채워줍니다.(물론 지연 로딩을 사용할 수도 있습니다.)
방금 말씀드린 부분을 코드로 짜서 하나씩 실행을 해보면 이해가 되실꺼에요^^!
Entity 동등성 비교
0
5
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
89
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





