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/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.