2010-02-01 7 views
2

Java 웹 응용 프로그램에서 최대 절전 모드를 사용하여 ORM을 수행합니다. 내 객체 중 일부에서는, 필자가 절대적으로 필요하기 전까지는 데이터를 가져 오는 것을 피하기 위해 느린 로딩을 사용합니다. 문제는 세션에서 초기 개체를로드 한 다음 해당 세션이 파괴된다는 것입니다. 나중에 객체에서 지연로드 된 콜렉션을 해결하려고하면 다음 오류가 발생합니다.최대 절전 모드에서 지연로드

org.hibernate.LazyInitializationException : 롤 컬렉션을 지연 생성하지 못했습니다. common.model.impl.User.groups, 세션 또는 세션이 종료되지 않았습니다.

새 세션을 콜렉션과 연결하여 해결하려고 시도했지만 동일한 결과가 나타납니다.

누구나 원래 세션이 사라지면 게으른 모음을 해결할 수있는 방법을 알고 있습니까? 초기화되지 않은 콜렉션 또는 다른 프록시를 액세스하기 전에

감사합니다 ...

--Steve

+1

당신은 실제로 stackoverflow에서 검색 했습니까? 검색은 많은 단서를 제공합니다. – Salandur

+0

사실, 저는 StackOverflow 및 다른 장소에서 검색을 수행했습니다. 내가 찾은 것은 내 문제에 적용된 대답을주는 것 같지 않았다. 특정 게시물을 놓친 경우 게시물을 올리면 도움이되는지 알 수 있습니다. – Steve

답변

2

세 가지 옵션 : 컬렉션에

  1. 전화 Hibernate.initialize(..)는 현재 세션

  2. 에서 분리 얻을에 대한 때마다 다시 FetchType.EAGER

  3. merge(..) 사용자 개체로 컬렉션을 선언 새 세션으로 이동

2

, 당신은 merge() 또는 lock()와 새로운 Session에 이전에로드 된 개체를 연결해야합니다. 나는 당신이 당신의 사건에서 어떻게했는지는 모르겠지만 실제로는 그의 groups을 검색하려고했을 때 귀하의 User이 여전히 분리되었다는 것입니다.

1

몇 가지 옵션이 있지만 주요 문제는 세션을 확장하거나 개체를 세션에 다시 연결해야한다는 것입니다.

파스칼은 새 세션에 오브젝트를 다시 연결하는 방법에 대한 답을 제공했습니다.

다른 옵션은 세션을 처리하는 방식을 변경하는 것입니다. 우리 애플리케이션에서는 Spring을 사용하고 Spring이 Hibernate의 세션을 관리하도록한다. 이것은 솔루션의 좋은 부분을 제공하지만 때때로 웹 환경에서 Hibernate를 사용하는 방식의 일부인 객체를 때때로 다시 부착해야합니다.

관련 문제