• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

22:05초 실행 관련 질문이 있습니다.

23.03.02 18:41 작성 23.03.02 21:13 수정 조회수 270

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

22:05초 부분을 보면 Lazy 옵션으로 바꾸고 실행을 해보면 em.find() 로 team 클래스를 찾아보지 않았음에도 team 엔티티에 select 쿼리가 나가는데 왜 해당 쿼리가 발생하는지 궁금합니다. Team findTeam = findMember.getTeam() 을 통해 해당 Team 객체를 얻었으니까 select 쿼리가 나갈 필요가 없는 것 아닌가요?

아니면 Team findTeam = findMember.getTeam()을 통해 얻은 해당 Team 객체는 조인을 통해 Id 값만 가지고 있는 비어있는 객체라 select 쿼리가 추가적으로 나가서 해당 객체의 필드값을 채워줘야하는 상태인가요? 만약 이게 맞다면 DB에 외래키가 저장될때는 Id값만 저장하고 다른 값들(name 필드 등등)은 다 날려버리고 저장하게 되는건지 궁금합니다.

답변 1

답변을 작성해보세요.

0

codesweaver님의 프로필

codesweaver

2023.03.04

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

코드에서 System.our.println(findTeam.getName()); 코드 대문에 셀렉트 쿼리가 한 번 발생합니다.

지연로딩은 엔티티를 실제로 사용하기 전까진 (데이터베이스에 다녀오기 전까진 절대 알 수 없는 정보) 프록시 객체라 하여 가짜 객체를 사용하게 됩니다.

그런데 findTeam.getName() 를 만나면 데이터베이스에서 이를 조회하기전엔 알 방법이 없습니다. findTeam은 사실 Team을 상속받은 프록시 객체 입니다.

감사합니다.