다음 두 쿼리의 차이는 무엇일까
SELECT c from Account c inner join c.person
SELECT c from Account c inner join fetch c.person
Person 이 Account 안에 있다는 가정 하에
SELECT c from Account c inner join c.person
이 쿼리는 person 을 갖고있는 모든 Account를 반환한다.
그러나 나중에 c.getPerson() 처럼 person을 불러와야 한다면 해당 Account의 person을 불러와야 하기 때문에
hibernate 가 내부적으로 쿼리를 하나 더 날린다.
다시 말해 위의 쿼리는 Person 오브젝트까지 가져오지는 않는다.
따라서, 더 쿼리의 낭비를 하지 않기 위해 join fetch를 쓰는게 좋다.
SELECT c from Account c inner join fetch c.person
join fetch 는 c.person 오브젝트도 불러온다.