2013-09-06 1 views
1

쿼리를 캐시 할 때 페치 (지연 연결)를 가져온 쿼리로 캐싱을 시도하고 있지만 LazyInitianlizationException이 표시됩니다.HQL, 컬렉션 및 쿼리 캐시 - LazyInitializationException

DAO의 콜렉션에서 Hibernate.initialize()을 사용해 보았는데 성공하지 못했습니다.

엔티티와 컬렉션에는 모두 캐시 주석이 있습니다.

쿼리 캐시의 컬렉션 ID에 대한 엔티티를로드하기 위해 2 레벨 캐시를 사용하여 최대 절전 모드로 설정하지 않아야합니까?

나는 OpenSessionInView 필터를 사용하고 싶지 않습니다.

편집 : 문제를 해결하는 DAO 방법의 Hibernate.initialize(). 웬일인지 처음에는 작동하지 않았다. 쿼리 나 조건을 사용하면 조인/가져 오기 프로필이 수행되지 않습니다. 수동으로 수행해야합니다. (조금 실망 스럽습니다)

답변

0

초기화가 수행되고 있습니까?

+0

서비스 계층에 @transaction 주석이 붙어 있습니다. 트랜잭션 외부에서 예외가 발생합니다. DAO 메소드에서 컬렉션을 초기화하려고했지만 결과가 없습니다. (getter를 호출하고 hibernate.initialize를 사용하는 것만으로) – miklesw

0

Hibernate 코드를 검사 할 때 Hibernate가 HQL 쿼리를 사용할 때 Hibernate가 캐시를 재사용 할 수없는 것 같았습니다 (HQL에서 캐싱 메커니즘에 이르는 컴파일러가 없음).

인터넷을 통해 LazyIntializationException을 읽으면 문제의 근본 원인을 알 수 있습니다.

하지만 솔직히 fjorm을 사용하는 것이 좋습니다. 면책 조항 : 저는 fjorm의 창립자입니다.

+0

실제 엔티티가 캐시에서로드되고있었습니다. 문제는 "참여한"엔티티에있었습니다. Hibernate.initialize는 문제를 해결했다 (콜렉션은 캐시로부터로드되었다) – miklesw