0

대부분의 엔티티는 필요하지 않으므로 지연로드가 있습니다. 특정 시나리오에서 함수는 트랜잭션 범위를 벗어난 열심히로드해야합니다. 내가 강제로 모든 종속성을로드하려면 어떻게 지금 Entity(E) might have associated entities 'X' which might have 'Y' as lazy loaded.최대 절전 모드에서 모든 의존성을 열심히로드하십시오.

class E{ 
    X x; //Lazy Load 
} 
class X{ 
    Y y; //Lazy load 
} 

, Hibernate.initialize(entity) may be loading only it's associated entities(X) but not the associated entites(Y) of X.

, 여기

구현

@Transaction 
public E getFullyLoadedDetachedEntity(Long id) { 
    E entity = dao.findById(id); 
    Hibernate.initialize(entity); 
    dao.detach(entity); 
    return entity; 
} 

의 비트입니다 그러나 문제는/게으른에서 객체를로드 어떤 수준.

업데이트 은 내가 여전히 X.getY 액세스에 대한 LazyException을 얻고있다

E entity = dao.findById(id); 
Hibernate.initialize(entity); 
for (X x : entity.getXList()) { 
    Hibernate.initialize(x); 
} 
dao.detach(entity); 

불구하고이 일을 시도()

+0

'들 Hibernate.initialize (entitity.getX()); '그 수준을 위해 그것을 할 것입니다,하지만 당신은 그 길 아래로 머리를하는 경우, 그것은 오래되지 않습니다 거의 모든 데이터베이스를 메모리로 가져 오기 전에 – JamesENL

답변

0

그냥 업데이트 된 코드를 하나 개 더 라인을 추가 할 수 있습니다.

E entity = dao.findById(id); 
Hibernate.initialize(entity); 
for (X x : entity.getXList()) { 
    Hibernate.initialize(x); 
    Hibernate.initialize(x.getY()); 
} 
dao.detach(entity); 

희망이 당신을 :) 도움이

관련 문제