当前位置: 首页 > 知识库问答 >
问题:

会话未关闭时的延迟初始化异常

邹俊友
2023-03-14

我在对象中使用Hibernate,即使会话未关闭,也会得到lazyinitializationexception。

以下是争议对象之间的关系。有3个对象:

  1. 目标A
  2. 对象B
  3. 对象C

ObjectA包括ObjectB作为FetchType=EAGER ObjectB包括ObjectC作为FetchType=LAZY

我们正在获取ObjectA。因此,由于急切获取类型,它会自动获取ObjectB。但是当我尝试使用ObjectB获取ObjectC时,它会出现此错误。

代码太大且专有。因此,无法共享代码。

注:1。所有这些操作仅在一个事务内完成。2、我查看了日志,发现会话没有关闭。我在JPA和Hibernate中发现了类似的链接-LazyInitializationException我在代码中也使用了annotationDriven标记,正如此链接中建议的那样。

我不明白为什么会这样。

共有1个答案

沈成天
2023-03-14

我的理解正确吗?

ObjectA包括ObjectB作为FetchType=EAGER ObjectB包括ObjectC作为FetchType=LAZY

我们正在获取ObjectA。因此,由于急切获取类型,它会自动获取ObjectB。但是当我尝试使用ObjectB获取ObjectC时,它会出现此错误。

目标A。getObjectB=正常?我的意思是没有抛出异常或错误,对吗?

然后当您通过ObjectB访问ObjectC时:

  1. 对象B。getObjectC或
  2. 目标A。getObjectB。getObjectC

您会得到LazyLaunalizationException的例外。

Hibernate文档说。。

如果在会话范围之外访问未初始化的集合或代理,即当拥有集合或具有代理引用的实体处于分离状态时,Hibernate将引发LazyInitializationException。

有时,需要在关闭会话之前初始化代理或集合。可以通过调用cat强制初始化。getSex()或cat。getKittens()。例如,size()。然而,这可能会让代码的读者感到困惑,而且对于泛型代码来说并不方便。

静态方法Hibernate.initialize()和Hibernate.is初始化()为应用程序提供了一种方便的方式来处理延迟初始化的集合或代理。Hibernate.initialize(cat)将强制初始化代理cat,只要它的会话仍然打开。Hibernate.initialize(cat.get小猫())对小猫的集合也有类似的效果。

从-https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-initialization

你有两个选择

FetchType=LAZY更改为FetchType=EAGER关于您在ObjectB和ObjectC之间的关系

或者使用Hibernate。初始化(ObjectC) 在事务结束前初始化objectC。。

希望这对你有帮助。。

 类似资料:
  • 问题内容: 要获得答案,请向下滚动到此内容的结尾… 基本问题与多次询问相同。我有一个带有两个POJO事件和用户的简单程序-一个用户可以拥有多个事件。 用户: 注意:这是一个示例项目。我 真的 很想在这里使用Lazy抓取。 现在我们需要配置spring和hibernate,并有一个简单的basic-db.xml用于加载: 注意:我玩过CustomScopeConfigurer和SimpleThrea

  • 问题内容: 要获得答案,请向下滚动到此内容的末尾… 基本问题与多次询问相同。我有一个带有两个POJO事件和用户的简单程序-一个用户可以拥有多个事件。 用户: 注意:这是一个示例项目。我 真的 很想在这里使用Lazy抓取。 现在我们需要配置spring和hibernate,并有一个简单的basic-db.xml用于加载: 注意:我玩过CustomScopeConfigurer和SimpleThrea

  • 我有一个应用程序,我正在扩展它以提供REST API。在主站点中一切正常,但当我尝试访问REST API时,我在异常日志中得到以下内容: 禁用延迟加载将解决此问题,但会导致不可接受的性能(加载时间从 200 毫秒到 22 秒)。我不知道如何处理这个问题。 我刚开始在ColdFusion中Rest,在我看来,CFC正在以一种不寻常的方式被处理。它们似乎没有被初始化(init方法似乎没有运行),现在看

  • 我对使用Spring MVC 3.1.2和Jackson 2的错误感到疯狂。 我有以下模型课: 当我得到一个用户实例时,它由Jackson正确序列化。但当我尝试获取包含好友的用户实例时,会引发以下异常: org.hibernate.延迟初始化角色集合失败:com.frooid.model.User.friends,没有会话或会话被关闭 我使用单个HQL获取此实例: 感谢大家!

  • 我正在开发一个Spring-MVC应用程序,其中我有3个类,组扫描,组节,组注释。组扫描器具有与组节的一对多映射,组节与组注释具有一对多映射。我正在尝试根据 GroupCanvas 的主键检索注释,但我收到Hibernate延迟初始化异常。我在网上尝试了这些建议,主要是SO,但似乎没有帮助。这是代码。 DAO 方法抛出错误: GroupCanvas模型: 组段模型类: 群注释: 错误日志: 我做错

  • 问题内容: 好的,我在正在处理的应用程序中收到上述异常。我正在使用JPA并hibernate。这是堆栈跟踪: 调试时,我注意到它似乎来自Form实体中的部分代码: “ fields.isEmpty()”部分将异常向上抛出。 据我所读,这应该可以通过设置要热切获取的集合来解决。我认为问题是字段集合。但是… 它已经很热闹。这样做是为了解决开发早期遇到的另一个问题。 可能是什么问题呢? 添加: Form