org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话

Sur*_*jee 10 java spring hibernate lazy-loading exception

我有两个物理服务器,我的Web应用程序由负载均衡器管理.我总是得到 -

org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话

当其中一个服务器被命中而另一个服务器顺利运行而没有任何问题.我有一个由应用程序启用和管理的本地托管缓存存储.只有在尝试从一个表访问一个特定列时才会发生此异常.无论哪个服务器被命中,其余的操作都可以正常工作.

使lazy = false将成为性能问题,因为该表上的行数非常大.顺便说一下,我们在会话中使用get(object)而不是load(object).

Abd*_*ull 13

从您提供的标签中,我推断您使用Spring Framework遇到了这个问题.我LazyInitializationException在使用Spring Data时遇到了同样的问题org.springframework.data.jpa.repository.JpaRepository.

我通过注释间接使用Hibernate从数据库中检索数据的方法解决了这个问题@Transactional.


atr*_*ain 10

听起来您尝试访问的列被配置为实体中的某种关联(OneToMany,ManyToOne,等等),并且您没有在DAO中填充该关联.然后,当您尝试访问该列时(在代码中没有Hibernate会话的位置),它没有填充,Hibernate会尝试加载它,然后繁荣.

因为您实际上正在使用该关联中的数据,所以这EAGER听起来像您实际上想要做的事情.如果该表太大,您应该查看索引,以便对它进行查询是有效的.


tol*_*ius 5

你的对象是分离的.在访问它之前,您需要将其重新附加到当前会话:

session.update(object);
Run Code Online (Sandbox Code Playgroud)

还要确保在事务中访问它

在此处阅读有关问题/解决方案的更多信