Member Entity가 Team과 1:N 관계일 때 Member Entity에는 Team 멤버변수가 들어가게 된다. 이 때 Member를 조회하게 되면 Team도 함께 조회해야 할까?
-> Member를 조회할 때 Team도 무조건 같이 사용하게 되는 경우가 많다면 같이 조회해서 사용할 수 있다.
-> 하지만 그럴 일은 많지 않다. 그래서 우리는 Member를 조회할 때 Team 테이블을 조회하지 않고 미루기로 했다. 이 때 가짜 엔티티를 Team에 할당하는데 이 것을 프록시라고 한다.
앞에서 Member를 조회할 때 Team 테이블을 조회하지 않고 미룬다고 했다. 그렇다면 미룰려면 어떻게 해야 할까? -> fetch 타입을 LAZY로 해주면 된다.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEAM_ID")
privtate Team team;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "LOCKER_ID")
private Locker locker;
이 처럼 @XXXToOne 끝이 One으로 끝나는 애노테이션은 FetchType.EAGER가 기본 타입이다. EAGER는 즉시 로딩이다. 그래서 이러한 애노테이션들은 FetchType.LAZY를 붙여주어야 한다.