2009-09-02 49 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

相关问题