2009-09-02 50 views
9

Grails中最常見的地方是哪裏有org.hibernate.LazyInitializationException,原因是什麼以及如何解決它?Grails和Hibernate的懶惰初始化異常

我覺得這個例外對於初學者來說有很大的幫助,所以如果你提供更多的例子,那就太好了。

回答

10

讓我們舉個例子:

class Book { 
    String title 
    Author author 
} 

class Author { 
    ... 
} 

Book book = Book.get(1) 

正如我們所知,默認獲取模式是在域類懶惰。考慮到上面的例子,假設我們獲得書對象,那麼Book對象會自動附加到hibernate會話對象,即第一級緩存。在域對象從會話對象中分離出來之後,我們試圖獲取book.author,此時它引發了Lazy初始化異常。

所以解決的辦法是,有兩種獲取方式爲渴望或附上你的書的對象使用如下代碼Hibernate的Session:

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

上面給出的說明是該方案的一個。可能還有更多。我請求其他人請分享。

+1

這對我來說確實很好,但將它放在需要的地方是很繁瑣的! – IgniteCoders 2014-05-23 13:31:05

+0

@IgniteCoders Amit在SO中看起來並不活躍。你知道什麼原因和對象在一個會話中被分離嗎? – 2017-07-12 15:25:18

+0

@AlexanderSuraphel我真的不知道。當異常升高某處時,我只是將它放置 – IgniteCoders 2017-07-12 19:03:21

相關問題