Grails和Hibernate的惰性初始化异常

Azd*_*der 9 grails hibernate grails-orm lazy-initialization

org.hibernate.LazyInitializationException在Grails中最常见的地方在哪里,原因是什么,你是如何解决的?

我认为这个例外对于新手来说很多,所以如果你提供更多的例子,它会很棒.

Ami*_*ain 10

让我们举一个例子:

class Book {
  String title
  Author author
}

class Author {
  ...
}

Book book = Book.get(1)
Run Code Online (Sandbox Code Playgroud)

我们知道,默认提取模式在域类中是懒惰的.考虑到上面的例子,假设我们得到了book对象,那么Book对象会自动附加到hibernate会话对象,即第一级缓存.在域对象从会话对象中分离然后我们尝试获取book.author之后,此时它会引发Lazy初始化异常.

所以解决方案是,要么将获取模式作为渴望,要么使用下面给出的代码将您的book对象附加到hibernate会话:

if(!book.isAttached()){
     book.attach()
}
Run Code Online (Sandbox Code Playgroud)

上面给出的描述是场景之一.可能会有更多.我请求其他人请分享.