Grails和Hibernate的延迟初始化异常

mo49yndu  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(118)

在Grails中,最常见的org.hibernate.LazyInitializationException出现在哪里?原因是什么?您是如何解决它的?
我认为这一个例外对于新手来说经常出现,所以如果你能提供更多的例子,那就太好了。

stszievb

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()
}

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

sf6xfgos

sf6xfgos2#

我得到这个错误是因为我正在检查用户是否有权限在一个 * 非事务性 * 的服务中使用JSecurity/Shiro执行一些操作。最后我只需要将服务设置为事务性就可以消除这个异常
更多信息here

相关问题