연관관계에 있는 Entity의 데이터를 사용 시점에 DB에서 가져오기 위해(지연 로딩)
즉시 로딩은 JPQL에서 N+1문제를 일으켜 권장되지 않는다.
@Entity
public class Member{
...
@ManyToOne(fetch = FetchType.EAGER)
RelationalEntity entity;
...
// find의 경우에는 PK를 통해 JOIN으로 가져온다.(쿼리 1번)
List<Member> members = em.createQuery("select m from Member m", Member.class);
// JPQL은 단순 SQL로 쿼리를 만들어 보내므로 Member Entity를 가져왔을 때(쿼리 1번)
// SQL : SELECT * FROM Member;
// 연관된 Entity를 List에 들어있는 Member size만큼 다시 호출한다(쿼리 N번)
// SQL : SELECT * FROM RelationalEntity WHERE ...
//해결방안 FetchType을 Lazy로 바꾸고 fetch join
List<Member> members = em
.createQuery("select m from Member m join fetch m.entity, Member.class);