在Grails中,最常见的org.hibernate.LazyInitializationException出现在哪里?原因是什么?您是如何解决它的?我认为这一个例外对于新手来说经常出现,所以如果你能提供更多的例子,那就太好了。
org.hibernate.LazyInitializationException
stszievb1#
让我们举一个例子:
class Book { String title Author author } class Author { ... } Book book = Book.get(1)
正如我们所知,域类中默认的获取模式是懒惰的。考虑到上面的例子,假设我们获得了book对象,然后Book对象自动附加到了hib会话对象,即一级缓存。在域对象从会话对象分离之后,然后我们尝试获取book.author,此时它引发了懒惰初始化异常。因此,解决方案是,使用下面给出的代码将fetch模式设置为eager或将book对象附加到hib会话:
if(!book.isAttached()){ book.attach() }
以上的描述只是其中一个场景。可能还有更多。我请求其他人分享。
sf6xfgos2#
我得到这个错误是因为我正在检查用户是否有权限在一个 * 非事务性 * 的服务中使用JSecurity/Shiro执行一些操作。最后我只需要将服务设置为事务性就可以消除这个异常。更多信息here。
2条答案
按热度按时间stszievb1#
让我们举一个例子:
正如我们所知,域类中默认的获取模式是懒惰的。考虑到上面的例子,假设我们获得了book对象,然后Book对象自动附加到了hib会话对象,即一级缓存。在域对象从会话对象分离之后,然后我们尝试获取book.author,此时它引发了懒惰初始化异常。
因此,解决方案是,使用下面给出的代码将fetch模式设置为eager或将book对象附加到hib会话:
以上的描述只是其中一个场景。可能还有更多。我请求其他人分享。
sf6xfgos2#
我得到这个错误是因为我正在检查用户是否有权限在一个 * 非事务性 * 的服务中使用JSecurity/Shiro执行一些操作。最后我只需要将服务设置为事务性就可以消除这个异常。
更多信息here。