해결된 질문
작성
·
68
답변 1
0
안녕하세요, 인프런 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()); // 여기서 실제 쿼리가 나갑니다.
추가적으로 비슷한 상황에 대한 김영한 강사님의 답변이 인프런에 올라와 있습니다. 아래의 게시물을 참고해보시면 이해에 도움이 될 것입니다:
이 게시물들에서 다루는 사례들은 지연 로딩과 관련된 특성과 데이터베이스 쿼리 실행에 대한 상세한 이해를 돕는 데 유용할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.