본문 바로가기

컴퓨터공학/Spring & Hibernate

Spring> Hibernate> Eager vs Lazy Loading

Lazy Loading 

모든엔티티를 부르는 것이 아니라 메인 엔티티를 먼저 부른다음에 필요한 엔티티를 부른다.

예를 들어서 강사를 검색하면 강사만 검색결과로 나오게 하지 강사가 가르치는 강의들도 같이 불러오지 않는다.

 

FetchType으로 Eager or Lazy를 설정한다.

 

 

 

복붙하여 새로 메인 함수를 만들어주자 .

 

 

 

그저 fetch 옵션만 추가하면 된다. 

Lazy로 하면 Course가 필요할 때만 부르게 된다.

 

만약 위 그림처럼 Instructor만 부르고 세션을 종료했다고 치자.

우린 Courses를  Lazy로 설정했다. 그래서 Course값은 없다.

이럴 때 Instructor 의 Courses를 부르려고 했을 경우 

Courses는 데이터가 없는데 부르려고 하기 때문에 오류가 나게 된다.

 

 

그래서 오류가 안 나게 하는 방법은 세션이 열려있을 때 Courses가 생길 수 있도록 부른다.

그 뒤에 세션이 종료되어도 Courses를 부르는 게 가능하다.

 


 

다른 방법은 HQL을 이용하는 법이다.

 

실행하면 Instructor와 Course를 모두 한 번에 불러온다.

쿼리를 작성하고 파라미터를 설정한 다음 결과값을 객체에 저장한다.

그리고 객체를 사용하면 된다.