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

작성자님의 프로필 이미지
작성자

작성한 질문수

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

실전 예제 5 - 연관관계 관리

안녕하세요

작성

·

228

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]


1. 지연로딩 시, DB에서 직접 조회가 아닌 캐시 내에서 효율적으로 데이터를 조회하기 위해 프록시 객체가 필요하다고 이해했는데 맞을까요?

2. JPA에서 == 비교는 항상 참이여야 한다고 하셨는데 같은 객체에서 가져온 동일한 데이터임을 확인하기 위해서 그런건가요?

3. 즉시로딩에서는 프록시 객체를 사용하지 않고 DB에 직접 접근해서 join을 하는 것인가요?

4. getSingleResult()에서 에러가 발생해서 까다롭다면 getResultList() 를 사용하면 되지 않나요? getSingleResult() 를 사용해야 하는 이유가 따로 있을까요?

 

답변 1

1

안녕하세요, GoodtoCU 님! 공식 서포터즈 codesweaver 입니다.

1. 지연로딩은, 프록시 객체로 버틸 수 없을때(데이터베이스에 갖다오지 않으면 도저히 알 수 없는 값을 사용자가 요구할때)까지 버티는 기술입니다 :) 만약 멤버를 조회하는데 이와 관련한 팀 엔티티 정보는 필요없다면, 굳이 이 둘을 다 조회할 필요가 없이 팀만 조회하는게 효율적이겠지요?

 

2 정확히는 영속성으로 관리되는 객체는 '한 개의 트랜잭션' 안에서 == (동등)이 참입니다. 동등이 참이라는 것은 어떤 객체가 같은 메모리(메모리주소)를 사용하는 객체라는 의미입니다.

3 네 즉시로딩은, 가령 멤버 엔티티를 조회하는 즉시, 팀 엔티티도 함께 조회하는 것을 말합니다. 이때 JPA는 쿼리 효율을 위해 멤버 테이블과 팀 테이블을 JOIN 합니다.

 

4 이 부분은 어떤 강의의 몇분 지점인지 알려주시면 확인하고 추가 답변드리도록 하겠습니다 ^^;;

감사합니다.

작성자님의 프로필 이미지
작성자

작성한 질문수

질문하기