2011-03-25 4 views
9

최대 절전 모드 커뮤니티에 게시 된 사람 : FetchProfiles과 같은 질문이 있습니다. 다음과 같이Hibernate FetchProfile을 사용하여 계층 구조에서 하위 자식 객체를로드하는 방법

는 성능상의 이유로 나는 데이터 모델의 관계를 가지고 : 나는 C와 부하 D를 열심히 할 수 있지만, 내가 열심히 E. 내가 아는로드하는 방법을 알아낼 수 없습니다 FetchProfile 내 사용

...C -[FetchType.LAZY]-> D -> [FetchType.LAZY] -> E 

내부 조인을 사용하여 NamedQuery를 성공적으로 사용할 수는 있지만 실제로 FetchProfile을 사용하여 수행하는 방법을 배울 수 없다는 버그가 있습니다. 시도 FetchProfile 내의 예 (다른 작업은 시간의 안개에서 분실) :

@FetchProfile(name = "cwithDAndE", fetchOverrides = { 
     @FetchProfile.FetchOverride(entity = C.class, association = "dByCId", mode = FetchMode.JOIN), 
     @FetchProfile.FetchOverride(entity = D.class, association = "eByDId", mode = FetchMode.JOIN) 
}) 

나는 세션에 대한 FetchProfile 내을 활성화하고 성공적으로 채워 에러없이 C와 D와에 Session.get를 사용 - E는 여전히 게으르고 비 거주자입니다. 필사적으로 나는 협회에서 C로 점 표기법을 시도한 것을 기억합니다. 깊이가 1 인 예제 만 찾을 수 있습니다.

이것은 채우기가 필요한 내 지식의 OCD 유형 격차입니다.

미리 도움을 청하십시오.

+0

C, D 및 E 수업의 특수 효과를 게시 할 수 있습니까? (FetchTypes 외에도) –

답변

3

C obj를 포함하는 B obj를 포함하는 A obj가 있습니다.

@FetchProfiles({ 
    @FetchProfile(fetchOverrides = { @FetchOverride(association = "b", entity = A.class, mode = FetchMode.JOIN) }, name = "a-with-b") 
    }) 
@Entity 
@Table(name="EDITOR_IDENTITIES") 
public class A { 
    private B b;  
    //... 
} 

B 클래스 :

@FetchProfiles({ 
    @FetchProfile(fetchOverrides = { @FetchOverride(association = "c", entity = B.class, mode = FetchMode.JOIN) }, name = "b-with-c") 
    }) 
@Entity 
@Table(name="EDITOR_IDENTITIES") 
public class B { 
    private C c;  
    //... 
} 

ADao 클래스 :

@Repository(value="aDaoImpl") 
@Transactional 
public class ADaoImpl { 

    @Override 
    public A loadByPrimaryKey(long id) 
    { 
     Session session = sessionFactory.getCurrentSession(); 
     session.enableFetchProfile("a-with-b"); 
     session.enableFetchProfile("b-with-c"); 
     Criteria criteria = session.createCriteria(A.class); 
     criteria.add(Restrictions.eq("id", id)); 
     A a = (A) criteria.uniqueResult(); 
     if(identity != null) 
      return identity; 
     else 
      return null; 
    } 
} 
0 기본적으로 그들은

...A -[FetchType.LAZY]-> B -> [FetchType.LAZY] -> C 

클래스입니다

당신은 C로 채워진 B로 채워질 것입니다. 이것은 매우 기본적인 해결책입니다. 당신은 인수로 가져 오기 프로파일의 목록을 가져 오는 Dao 메소드를 만들 수 있습니다.

관련 문제