Hibernate 의 게 으 름 로드

지금 나 는 Hibernate 에서 반드시 알 아야 할 특징 을 토론 할 것 이다. 특히 매우 큰 응용 프로그램 에서 이러한 관련 이 있 는데 게 으 름 로드 라 고 한다.
게 으 름 피 울 때: 간단 한 문제
인터넷 서점, 서점 관리자 제품 목록가장 원시 적 인 방법 은 하나의 모델 실체 에 투사 하여 일련의 제품 실 체 를 관리 할 수 있다.큰 서점 에 서 는 수천 개의 제품 이 서로 다른 목록 으로 나 뉜 다.사용자 가 이 서점 을 방문 할 때 디 렉 터 리 는 데이터베이스 에서 불 러 와 야 합 니 다. 우 리 는 모든 실 체 를 메모리 에 불 러 오고 싶 지 않 을 수도 있 습 니 다.대형 소매상 에 게 물리 적 메모리 가 이 대량의 데 이 터 를 기계 에 불 러 오 는 것 은 불가능 할 수도 있 습 니 다. 설령 이것 이 가능 하 다 하 더 라 도 사이트 의 성능 을 약화 시 킬 수 있 습 니 다. 우 리 는 디 렉 터 리 만 불 러 오고 싶 을 수도 있 습 니 다. 기껏해야 유형 을 더 하고 싶 을 수도 있 습 니 다.사용자 가 디 렉 터 리 에 깊이 들 어 갈 때 만 아래 의 하위 메뉴 는 데이터베이스 에 불 러 와 야 합 니 다.이 문 제 를 관리 하기 위해 Hibernate 는 게 으 른 로 딩 이라는 간단 한 방법 을 제공 합 니 다. 사용 할 때 직접 요청 할 때 만 실 체 를 불 러 옵 니 다.
게 으 른 로드 는 어떻게 문 제 를 해결 합 니까?
지금 우 리 는 이미 이 문 제 를 이해 했다. 우 리 는 게 으 름 이 실제 에서 어떻게 우 리 를 도 왔 는 지 알 아 보 자. 만약 우리 가 위의 문 제 를 해결 하 는 것 을 고려한다 면, 우 리 는 아래 의 방식 으로 디 렉 터 리 를 방문 할 것 이다.
//Following code loads only a single category from the database:
Category category = (Category)session.get(Category.class,new Integer(42));

그러나 모든 디 렉 터 리 에 접근 할 수 있 고 게 으 름 피 우 는 것 도 효과 적 이 며 제품 소 개 는 수요 에 따라 데이터 베이스 에서 얻 을 수 있 습 니 다.예 를 들 어 아래 코드 에 서 는 두 번 째 줄 에서 인용 할 때 만 제품 대상 을 불 러 옵 니 다.
/Following code loads only a single category from the database
Category category = (Category)session.get(Category.class,new Integer(42));
//This code will fetch all products for category 42 from database 'NOW'
Set<Product> products = category.getProducts();

이것 은 필요 에 따라 불 러 오 는 문 제 를 해결 했다.
어떻게 게 으 름 을 Hibernate 에 불 러 오 는 것 이 효과 가 있 습 니까?
다음 단 계 를 말 하기 전에 게 으 른 로 딩 을 기본 으로 사용 하 는 두 가지 상황 의 서로 다른 반응 을 강조 하 는 것 이 중요 하 다.
기본 동작 은 '빠 른 로드 속성', '느 린 로드 집합' 입 니 다.Hibernate 2 에 서 는 모든 인용 이 기본 으로 급 불 러 온 것 임 을 기억 할 수 있 습 니 다.마찬가지 로 주의해 야 할 것 은 @ OneToMany 와 @ ManyToMany 는 기본적으로 게 으 름 으로 불 러 옵 니 다. @ OneToOne 과 @ ManyToOne 은 기본적으로 급 으로 불 러 옵 니 다. 앞으로 많은 함정 을 피 할 수 있다 는 것 을 기억 하 세 요.
게 으 른 로 딩 을 사용 하기 위해 서 는 게 으 른 로 딩 을 원 하 는 관계 에 "fetch = FetchType. LAZY" 를 사용 해 야 합 니 다. 사용 하 는 예 는 다음 과 같 습 니 다.
@OneToMany( mappedBy = "category", fetch = FetchType.LAZY )
private Set<ProductEntity> products; 

그것 과 평행 하 는 속성 중 하 나 는 "FetchType. EAGER" 이 고 레이 지 와 반대 입 니 다.
원본 주소:http://howtodoinjava.com/2014/09/26/lazy-loading-in-hibernate/

좋은 웹페이지 즐겨찾기