`
newlethe
  • 浏览: 83832 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate 异常org.hibernate.LazyInitializationException

阅读更多
错误页面提示

could not initialize proxy - no Session

控制台

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

病症:这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中,然后你使用了,导致该异常。


Q:我以get得到一个对象,在JSP页面以EL表达它的实例变量时,也抛出了该异常,在application的测试时却没有出现。
A:推测可能是该实例变量是hibernate进行加载的,可能hibernate本身是以load的方式将该实例变量得到。
解决方法:

方法1.用openSessionInView
方法2.把这个类的延迟加载禁掉

我自己的代码就多了这么一句话:

         resultExchangeRatePojo.getDollarRmb();//在它的实例变量DollarRmb的session未关闭前存入,实际上将它载入内存。(我就想在没用关闭 session之前用一下就可以把值保存到内存中了)

结果:果然页面上就正常显示了。


总结:原因是hibernate的session已经关闭,集合没有被初始化。在hibernate中:hibernate3 默认支持延迟加载(lazy="proxy"我们可以把proxy看作是true),hibernate2 默认立即加载 (lazy="false")。

      在hibernate3中,所有的实体设置文件(user.hbm.xml)中的lazy属性都被默认设成了true,就是当这个类没有被调用时,延时加载,导致了以上情况的发生,在配置文件中将lzay属性设为false就可以了。

----------------------------------------------------------------

原因:
<may-to-one>or<one-to-may>的lazy属性默认为:lazy = "proxy"
解决:<many-to-one>   & <set> 中设置 lazy="false"

如果还不行,根据自己需求,经过我的仔细排查放在set一端不行,那就放在<many-to-one>那端
分享到:
评论

相关推荐

    Hibernate配置常见错误

    错误表现:在Session关闭后尝试访问懒加载属性,抛出“org.hibernate.LazyInitializationException: could not initialize proxy - no Session”异常。 解决方案:理解并合理使用Open Session in View(OSIV)模式...

    hibernate 延迟加载.docx

    然而,如果在`Session`关闭后尝试访问关联对象,会抛出`LazyInitializationException`异常,因为延迟加载策略只在`Session`打开的状态下有效。 **延迟加载的生效期** 延迟加载的生效时间与`Session`的生命周期相同...

    懒加载异常解决.docx

    在使用懒加载技术时,可能会遇到“LazyInitializationException”这类异常。该异常通常发生在试图访问延迟加载的关联对象时,而此时Session已经关闭的情况。例如,在Hibernate中查询一个对象并尝试访问其延迟加载的...

    MyEclipse_Hibernate_快速入门中文版.rar

    - **错误排查**:熟悉常见的Hibernate异常,如LazyInitializationException,及时定位和解决问题。 通过这个快速入门教程,读者可以系统地学习如何在MyEclipse环境中配置和使用Hibernate,实现高效、便捷的Java...

    Hibernate面试题专栏 - 最全的Hibernate面试题, Hibernate笔试题, Hibernate问题

    - Hibernate提供了自己的异常体系,如HibernateException、ObjectRetrievalFailureException等,需要在编程中适当地捕获和处理。 **9. 性能优化** - 避免N+1查询,通过批处理或JOIN查询减少数据库访问次数。 - 合理...

    java框架之hibernate

    - 如果数据库中不存在该对象,则会抛出`org.hibernate.LazyInitializationException`或`org.hibernate.ObjectNotFoundException`异常。 - 使用`load()`可以提高性能,因为它减少了不必要的数据库访问。 2. **Get...

    hibernate懒加载策略.doc

    - 懒加载可能导致“懒加载异常”(LazyInitializationException),即在Session关闭后尝试访问懒加载属性时,由于没有有效的Session,无法执行数据库查询。因此,开发者需要确保在Session的有效期内访问懒加载属性...

    Hibernate延迟加载以及利用Spring

    Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed ``` - **日志记录**:为了更好地诊断问题,可以使用log4j等工具进行日志...

    java错误大全(包括基本异常和开源框架出现的异常)

    6. **Hibernate异常:** - `MappingNotFoundException`:Eclipse项目中未刷新,或者映射文件不在指定目录。 - `HibernateException`: 如果`hibernate.cfg.xml`未在根目录下,或配置解析失败,这可能导致数据库连接...

    hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法

    当我们在 Hibernate 中使用懒加载特性时,可能会遇到 LazyInitializationException 异常,这是因为 Hibernate 的 Session 生命周期太短,导致了懒加载失败。 为了解决这个问题,我们可以使用 Spring 提供的一个支持...

    hibernate延迟机制分析

    然而,当在Session关闭后尝试访问这些延迟加载的属性,就会抛出`org.hibernate.LazyInitializationException`异常,提示“无法懒惰初始化集合角色...,无会话或会话已关闭”。这是因为延迟加载需要有效的Hibernate ...

    Hibernate延时加载与lazy机制.doc

    Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...

    Java常见异常集-Java,Hibernate,Tomcat异常

    13. **Hibernate的LazyInitializationException**:当试图初始化一个代理对象,但其所属的Session已关闭时,会抛出此异常。解决方法是确保在Session关闭前完成懒加载操作,或考虑使用Eager Loading或Open Session In...

    Hibernate映射导致的几个异常

    这篇文章将深入探讨几个由Hibernate映射导致的常见异常,以及如何解决这些问题。这些异常通常与实体类、XML映射文件或注解配置不正确有关。 1. **`LazyInitializationException`:** 这个异常通常发生在尝试在会话...

    hibernate

    但需要注意的是,如果在一个事务之外访问懒加载的属性,会引发`LazyInitializationException`异常。 ### Hibernate Cascade 级联操作 `Cascade`是Hibernate中的一个非常有用的功能,它允许将某些操作级联到关联的...

    Hibernate开发手册

    - **错误处理**:了解常见的 Hibernate 异常类型及其解决方案,例如 `LazyInitializationException` 等。 - **测试**:编写单元测试和集成测试来验证 Hibernate 功能是否正确实现。 - **代码审查**:定期进行代码...

    hibernate的延迟检索在轻量级J2EE框架中的应用

    - **错误处理**:需要注意的是,延迟加载可能会导致懒加载异常(LazyInitializationException),当Session关闭后尝试访问未初始化的代理对象时会发生这种情况。因此,在实际开发中要注意正确处理这种情况,避免出现...

    理解Hibernate中PO的代理类

    如果在持久化上下文(Session)之外或事务结束之后尝试访问懒加载属性,就会引发`LazyInitializationException`异常。为了避免这种情况,需要在配置或代码中妥善处理懒加载的代理对象。如果需要在事务外部使用这些...

    过滤器对于session周期的控制

    然而,这也意味着如果Session在加载懒加载属性之前已经关闭,则会导致`HibernateException`(具体为`org.hibernate.LazyInitializationException`)。因此,正确地管理Session的生命周期对于实现Lazy Loading至关...

Global site tag (gtag.js) - Google Analytics