Grails和Hibernate的惰性初始化异常

时间:2009-09-02 14:24:07

标签: hibernate grails gorm lazy-initialization

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

我认为这个例外对于新手来说很多,所以如果你提供更多的例子,那就太棒了。

2 个答案:

答案 0 :(得分:10)

让我们举一个例子:

class Book {
  String title
  Author author
}

class Author {
  ...
}

Book book = Book.get(1)

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

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

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

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

答案 1 :(得分:1)

我有一个,因为我正在检查用户是否有权在非交易的服务中使用JSecurity / Shiro执行某些操作。最后,我只需将服务设置为事务性以消除异常。

此处有更多信息:http://www.nabble.com/JSecurity-LazyInitializationException-in-default-DbRealm.isPermitted%28%29-td24939803.html