사내 주문 관리 시스템을 개발한다고 가정

Member)은 팀(Team) 하나에만 소속할 수 있다. (N:1)Member)은 여러 주문내역(Order)을 가진다. (1:N)Order)은 상품정보(Product)를 가진다. (N:1)Member와 연관된 Team은 자주 함께 사용되었다. (즉시 로딩 설정)Member와 연관된 Order는 가끔 사용되었다. (지연 로딩 설정)Order와 연관된 Product는 자주 함께 사용되었다. (즉시 로딩 설정)//회원 엔티티@Entity@Getter @Setterpublic class Member{ @Id private String id; private String username; private Integer age; //회원과 팀 즉시 로딩 @ManyToOne(fetch = FetchType.EAGER) private Team team; //회원과 주문 지연 로딩 @OneToMany(mappedBy = "member", fetch = FetchType.LAZY) private List<Order> orders;}

--회원을 조회할 때 실행된 SQLSELECT MEMBER.ID AS MEMBERID, MEMBER.AGE AS AGE, MEMBER.TEAM_ID AS TEAM_ID, MEMBER.USERNAME AS USERNAME, TEAM.ID AS TEAMID, TEAM.NAME AS NAMEFROM MEMBER MEMBER LEFT OUTER JOIN TEAM TEAM ON MEMBER.TEAM_ID = TEAM1_.IDWHERE MEMBER0_.ID = 'member1'
회원과 팀은 FetchType.EAGER로 설정해 조인 쿼리를 만들어 회원과 팀을 한 번에 조회한다.
반면 회원과 주문내역은 FetchType.LAZY로 설정해 결과를 프록시로 조회한다.
따라서 실행된 SQL에 Order는 나타나지 않았다.