🔙뒤로가기

Member를 조회할 때 Team도 함께 조회해야 할까?

단순히 member 정보만 사용하는 비즈니스 로직

println(member.getName());

Untitled

지연 로딩 LAZY를 사용하여 프록시로 조회

@Entity
public class Member {

    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "USERNAME")
    private String name;

    @ManyToOne(fetch = FetchType.LAZY) //** 지연 로딩
    @JoinColumn(name = "TEAM_ID")
    private Team team;
 ..
    }

지연 로딩

Untitled

Untitled

Team team = member.getTeam();
team.getName(); // 실제 team을 사용하는 시점에 초기화(DB조회)

Member와 Team을 자주 함께 사용한다면?

⇒ 즉시 로딩 EAGER를 사용해서 함께 조회

@Entity
public class Member {

	 @Id
	 @GeneratedValue
	 private Long id;

	 @Column(name = "USERNAME")
	 private String name;

	 @ManyToOne(fetch = FetchType.EAGER) //** 즉시 로딩
	 @JoinColumn(name = "TEAM_ID")
	 private Team team;
	 ..
}

즉시 로딩

Untitled

즉시 로딩(EAGER), Member 조회 시 항상 Team도 조회

⇒ JPA 구현체는 가능하면 조인을 사용해서 SQL 한번에 함께 조회

프록시와 즉시 로딩 주의