아래와 같은 코드가 있다고 가정해보자.
Member member = memberDAO.findById(memberId);
Team team = member.getTeam();
String teamName = team.getName();
지연 로딩은 객체를 사용하는 시점에 SQL을 날려 로딩한다(JPA default).
그러므로 첫 줄에서 DB에 SELECT * FROM MEMBER WHERE ~ 쿼리를 날려 Member 객체를 가져오고
member.getTeam()을 호출할 때는 Proxy 객체로 채우며 team.getName()으로 실제 데이터를 사용할 때
SELECT * FROM TEAM WHERE ~ 쿼리를 DB에 날려서 Team 객체의 데이터를 채운다.
즉시 로딩은 JOIN SQL로 연관된 객체까지 모두 한 번에 조회하는 로딩이다.
SELECT M.* , T.* FROM MEMBER, TEAM JOIN MEMBER M, TEAM T ~
Index에 맞춰 전략을 선택하면 된다.