1. 지연 로딩 ( LAZY )

Untitled

@Entity
public class Member {

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

위와 같이 하고 조회시, Member만 조회된다.

try {
	Team team = new Team();
	team.setName("TeamA");
	em.persist(team);

	Member member = new Member();
	member.setName("AAA");
	member.setTeam(team);
	em.persist(member);

	Member m = em.find(Member.class, member.getId()); // 멤버만 조회됨.
}
//...

Member만 조회된다.

대신,

try {
	Team team = new Team();
	team.setName("TeamA");
	em.persist(team);

	Member member = new Member();
	member.setName("AAA");
	member.setTeam(team);
	em.persist(member);

	Member m = em.find(Member.class, member.getId()); // 멤버만 조회됨.

	m.getTeam().getClass(); // Team의 proxy 객체반환
	m.getTeam.getName(); // 이 시점에 team의 대한 쿼리가 날아감!
}
//...

이처럼 프록시와 LAZY(지연)로딩을 이용하면 member만 가져온 후, 프록시로 가져온 가짜 엔티티프록시 객체에 접근할때, 그때 JPA가 쿼리를 실행하여 가져온다.

Untitled

Untitled