你在Grails中获得org.hibernate.LazyInitializationException
的最常见的地方在哪里,原因是什么?你是如何解决的?
我认为这个例外对于新手来说很多,所以如果你提供更多的例子,那就太棒了。
答案 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执行某些操作。最后,我只需将服务设置为事务性以消除异常。