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

从HttpSession中的Hibernate会话检索的实例的生存期

房新翰
2023-03-14

我将用一个例子来解释我的问题。在我的JSP登录页面中,每个正确的登录都放入一个名为“user”的对象的实例,它将用户的数据保存到HttpSession(session.setAttribute(“user”,userObject))中。创建该对象的方法是检查用户的用户名和密码,并从HibernateSession检索user对象的实例('user')。
在另一个页面中,当我从HttpSession检索上面设置的userObject时,可以毫无错误地检索该对象。但是当调用它的方法时,它会给出一个异常org.hibernate.lazyInitializationException:could not initialize proxy-no session。为什么我不能从HttpSession中访问userObject(尽管我已经在前面放了它)?

为什么在HttpSession中存在一个空对象(实例变量没有值),即使该对象在添加到会话之前有值?

共有1个答案

樊烨烨
2023-03-14

如果user实体有一个集合属性,而该属性是懒洋洋地提取的,就会发生这种情况。然后,只有当调用方实际需要通过size()iterator()等方式访问集合时,集合才会实际填充来自DB的数据。这需要在与检索user时相同的Hibernate会话中发生。在一个设计得当的webapplication中,Hibernate会话的生命周期正好是一个HTTP请求-响应。因此,如果访问collection属性发生在不同的Hibernate会话中(读为:不同的HTTP请求),那么您将完全得到此异常。

要解决此问题,您需要急切地获取collection属性,或者在检索用户时对collection属性使用hibernate#initialize()

  • Hibernate参考文档-初始化集合和代理
 类似资料:
  • 问题内容: 我正在尝试将Redis会话集成到用Node.js编写的身份验证系统中。 我已经能够成功设置Redis服务器和Express服务器。 这是我的设置(只是重要的一点): 现在…我该如何实际创建,阅读和销毁会话?我已经阅读了很多关于如何设置的文章以及关于SO的许多问题,但是我发誓每个都只停留在配置上,并且不解释如何实际使用它… 我知道这可能非常简单,但是请不要投票,而只是解释一下:)。 问题

  • 我在一次采访中被问到,你有一个活动的hibernate会话,你从中检索一个实体——客户实体。您对实体进行了一些更改,但没有通过调用em.flush或em.persist将其保存到数据库中。现在,再次从数据库中检索相同的实体。它会有你之前做的改变吗?

  • SSO/SAML使用OKTA API与SP一起工作。我的问题是,有没有一种方法可以从我的应用程序中获取当前的OKTA会话Id?

  • 问题内容: 如何在PHP中设置会话生存期?我希望将其设置为永久,只要该请求存在。该请求是AJAX。我处理AJAX请求的PHP代码是: 和JavaScript: 该会话始终在300秒后重置。 问题答案: PHP上的会话与Cookie类型的会话一起使用,而在服务器端,会话信息会不断删除。 要在php中设置时间,可以在session_start之前使用session_set_cookie_params

  • 1. 前言 本节课程将和大家一起聊聊 Hibernate 的核心组件之一: Session 对象。 通过本节课程,你将了解到: 创建 Session 对象的 2 个方法; 线程上下文的作用。 2. 创建 Session 对象 Session 是 Hibernate 的重要组件之一,是交给开发者的一把利剑。开发者可使用 Session 对象提供的增、删、改、查(Crud)等方法实现基础的数据操作。

  • 1. 前言 Hibernate 的核心价值观是:开发者们!做你们应该做的。脏的、累的、没技术含义的由本尊来做。 本节课和大家一起好好的聊聊 Hibernate 的核心组件之一:会话工厂(SessionFactory)。 通过本节课,你将学习到: 会话工厂的设计要求; 会话工厂的核心功能。 2. 会话工厂的作用 原生 Jdbc 开发如同自己炒菜做饭,需经手买菜、洗菜、做菜……一系列过程。 基于 Hi