代码之家  ›  专栏  ›  技术社区  ›  Azder

Grails和Hibernate的惰性初始化异常

  •  9
  • Azder  · 技术社区  · 17 年前

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

    我认为这一个例外对于新手来说非常常见,所以如果你能提供更多的例子,那就太好了。

    2 回复  |  直到 16 年前
        1
  •  10
  •   Amit Jain    17 年前

    让我们举一个例子:

    class Book {
      String title
      Author author
    }
    
    class Author {
      ...
    }
    
    Book book = Book.get(1)
    

    正如我们所知,默认的获取模式在域类中是惰性的。考虑上面的例子,假设我们得到book对象,然后book对象自动连接到hibernate会话对象,即一级缓存。在域对象与会话对象分离之后,我们尝试获取book.author,此时它会引发延迟初始化异常。

    因此,解决方案是,使用下面给出的代码将“获取”模式设置为“急切”,或将书本对象附加到hibernate会话:

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

    上面给出的描述就是其中一个场景。可能还有更多。我请求其他人分享。

        2
  •  1
  •   Tiago Alves    17 年前

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

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