inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

단방향 연관관계

@ManyToOne(fetch = FetchType.LAZY) 하고 콘솔에 select 쿼리문

해결된 질문

99

soojinkimss

작성한 질문수 58

0

[질문 내용]

단방향 연관관계 영상 22분 10초 쯤에서 Member클래스에 Team 필드 어노테이션으로 @ManyToOne(fetch = FetchType.LAZY)를 지정하고 서버를 재실행하였을 때 김영한 강사님 콘솔에서는 쿼리가 지연로딩되어 분리돼서 Member와 Team이 따로 조회가 되는걸로 나와있는데요 저도 같은 환경으로 실행하였을 때는 한 DB테이블만(MEMBER) 만 조회돼서 나오는데 왜 이러는 것인지 궁금합니다

스크린샷 2025-01-20 135606.png

.

java jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. soojinkimss님.

지연 로딩(Lazy Loading)은 JPA에서 엔티티의 연관된 데이터를 실제로 필요할 때 즉, 호출할 때 로드하는 방식입니다. 따라서, @ManyToOne(fetch = FetchType.LAZY)로 설정된 연관 관계에서는 관련된 엔티티의 데이터를 조회할 때 실제 쿼리가 실행됩니다. 이를테면, Member 엔티티에서 Team을 참조할 때, team.getName() 등을 호출하기 전까지 실제 Team 엔티티는 데이터베이스에서 조회되지 않습니다.

질문하신 상황에서 Member만 조회되고 Team이 조회되지 않는 것은 Team 엔티티의 프로퍼티를 접근하지 않아서일 가능성이 높습니다. 만약 Team 엔티티의 데이터를 사용하지 않으면 실제로 데이터베이스 쿼리가 발생하지 않습니다. 이는 JPA의 프록시 객체 때문에 발생하는데, 프록시 객체는 실제 데이터에 접근하기 전까지는 데이터베이스 조회를 지연시킵니다.

이를 직접 확인하고 싶으시다면 다음과 같은 코드를 추가하신 후 실제 쿼리를 확인해볼 수 있습니다:

Member member = em.find(Member.class, memberId);
System.out.println(member.getTeam().getName()); // 여기서 실제 쿼리가 나갑니다.

추가적으로 비슷한 상황에 대한 김영한 강사님의 답변이 인프런에 올라와 있습니다. 아래의 게시물을 참고해보시면 이해에 도움이 될 것입니다:

이 게시물들에서 다루는 사례들은 지연 로딩과 관련된 특성과 데이터베이스 쿼리 실행에 대한 상세한 이해를 돕는 데 유용할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

33

2

inheritance startegy 선택시 고려사항

0

24

1

Entity 동등성 비교

0

23

1

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

0

48

1

H2데이터베이스 파일 생성

0

58

2

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

0

57

2

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

0

58

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

62

1

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

0

98

2

UnsupportedOperationException 발생

0

87

3

H2 Database 연결이 안됩니다.

0

98

2

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

0

88

2

h2데이터베이스 실행오류

0

110

2

persistence.xml

0

112

2

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

0

83

1

영속성 컨텍스트

0

69

1

JPA 프록시

0

98

1

Native Query와 MyBatis

0

72

1

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

0

92

1

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

0

121

3

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

0

96

3

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

0

109

2

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

0

149

1