2009-09-02 3 views
9

Grails에서 org.hibernate.LazyInitializationException을 얻는 가장 일반적인 장소는 어디에서 왔으며 그 원인은 무엇이며 어떻게 해결 했습니까?Grails와 Hibernate의 Lazy 초기화 예외

나는이 예외가 초보자에게 많이 떠오른다 고 생각한다. 그래서 더 많은 예제를 제공한다면, 좋을 것이다.

답변

10

는 예를 취할 수 있습니다. 위의 예를 고려하면, 책 객체를 얻으면, Book 객체는 최대 절전 모드 세션 객체, 즉 제 1 레벨 캐시에 자동으로 첨부된다. 그리고 도메인 객체가 세션 객체로부터 분리 된 후 book.author를 가져 오려고 할 때, 현재 Lazy 초기화 예외가 발생합니다.

그래서 솔루션입니다

는이 중 하나를 아래의 코드를 사용하여 세션을 최대 절전 모드 열망 모드를 가져 오거나 책 객체를 연결하기 :

if(!book.isAttached()){ 
    book.attach() 
} 

위의 설명은 시나리오 중 하나입니다. 더 많은 것이있을 수 있습니다. 다른 사람들에게 제발 공유하도록 요청합니다.

+1

나를 위해 정말 잘 작동하지만 필요한 모든 곳에 배치하는 것은 지루하다! – IgniteCoders

+0

@IgniteCoders Amit가 SO에서 활발하게 보이지 않습니다. 한 세션에서 어떤 원인과 객체가 분리되는지 알고 있습니까? –

+0

@AlexanderSuraphel 나는 정말로 모른다. 예외가 어딘가에서 일어날 때 나는 그것을 놓는다. – IgniteCoders

1

사용자가 JSecurity/Shiro를 사용하여 트랜잭션이 아닌 서비스에서 일부 작업을 수행 할 수있는 권한이 있는지 확인했기 때문에 하나가 있습니다. 결국 예외를 제거하기 위해 트랜잭션을 트랜잭션으로 설정해야했습니다. 여기

상세 정보 : 모드는 도메인 클래스에 게으른 가져 우리가 알다시피,

class Book { 
    String title 
    Author author 
} 

class Author { 
    ... 
} 

Book book = Book.get(1) 

기본 : http://www.nabble.com/JSecurity-LazyInitializationException-in-default-DbRealm.isPermitted%28%29-td24939803.html