1. eager & lazy 예시
- eager
- Member 테이블과 Team 테이블이 있고 양방향 매핑 관계이며 ManyToOne이다.
- Member를 조회한다고 할때 eager라면 아래와 같이 쿼리가 나간다.
Hibernate:
select
member0_.MEMBER_ID as MEMBER_I1_0_0_,
member0_.TEAM_ID as TEAM_ID3_0_0_,
member0_.USERNAME as USERNAME2_0_0_,
team1_.TEAM_ID as TEAM_ID1_1_1_,
team1_.name as name2_1_1_
from
Member member0_
left outer join
Team team1_
on member0_.TEAM_ID=team1_.TEAM_ID
where
member0_.MEMBER_ID=?
- lazy의 경우
Hibernate:
select
member0_.MEMBER_ID as MEMBER_I1_0_0_,
member0_.TEAM_ID as TEAM_ID3_0_0_,
member0_.USERNAME as USERNAME2_0_0_
from
Member member0_
where
member0_.MEMBER_ID=?
2. eager & lazy 차이
- 위와 같이 eager는 관련된 모든 객체를 요구한다.
- 반대로 lazy의 경우 조회한 객체만 조회하며 나머지 데이터는 조회를 미룬다.
- 어떤 것이 더 좋을지는 설계와 사용에 따라 달려있다.
- member를 부를때 team 정보도 반드시 사용하는 경우가 잦다면 eager가 훨씬 나을것이다.
- 반대로 그런 경우가 적다면 query를 낭비하는 경우가 빈번하게 발생하는 것이다.
- 하지만 이분법적인 경우 외에도 함께 조회되는 정보의 양이나 개발환경에 따라 어떤게 적절한지 테스트해볼 필요가 있다.
3. 참조