Hibernate 圣杯与冬眠';s的延迟初始化异常

Hibernate 圣杯与冬眠';s的延迟初始化异常,hibernate,grails,gorm,lazy-initialization,Hibernate,Grails,Gorm,Lazy Initialization,Grails中出现org.hibernate.LazyInitializationException异常最常见的地方在哪里,原因是什么,您是如何解决的 我认为这一例外对于新手来说非常常见,所以如果你能提供更多的例子,那就太好了。我得到了一个例外,因为我在检查用户是否有权在非事务性服务中使用JSecurity/Shiro执行某些操作。最后,我不得不将服务设置为事务性的,以消除异常 更多信息请参见:让我们举一个例子: class Book { String title Author auth

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


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

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


更多信息请参见:

让我们举一个例子:

class Book {
  String title
  Author author
}

class Author {
  ...
}

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

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

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

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

这对我来说确实很好,但把它放在需要的地方太单调了@IgniteCoders Amit似乎不太活跃。“你知道是什么原因导致一次会议和一个对象分离吗?”@AlexanderSuraphel,我真的不知道。我只是在某个地方出现异常时放置它