`

LazyInitializationException: could not initialize proxy - no Session

阅读更多

OK,这个问题可以解决,先让我描述下:

SSH结合开发
这是一个登陆模块
我在login的action里面封装了一个菜单list 存入session

然后跳转到主页,主页里根据这个用户的菜单list生产菜单
不过模块是menu的action

这时候就跑错了!
javax.servlet.ServletException: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

在网上知道是什么延迟 什么的。

但是按照解决办法来都行不通。

后来我解决的方法很简单,也没有用到lazy什么的,因为我的表都是没有关联的。我是在取值的时候,之前用的是load,后来改成了get。

因为lazy默认是ture,load 方法是延迟加载的,而用get后,就不是延迟加载,等价于lazy=false。所以问题解决。以下是get load的说明:

.延迟加载    
    
  延迟加载的好处在于节省资源,只在被调用的时候才对查询,避免了即时加载遇上大量数据时占用大量资源的情况。
  延迟加载有两种:  

  a. get()和load()  使用方法见下面9
  这两个方法都用于查询已知只有一条记录的情况,但是load()方法是有延迟加载的。

  b. orm类的延迟加载
  每一个表对应的.hbm.xml文件中,都可以在<class />标签内加一个lasy="true || false"这样的开关,用于控制此orm类是否启用延迟加载。
  lazy="true" 这个延迟加载的开关,默认认是ture,不建议关闭。
  
  那么比较一下上面两个延迟加载的区别: 
  load()仅用于只有一条记录的情况下使用延迟加载,使用get()则不延迟。 
  .hbm.xml文件中lazy所控制的,是整个orm类。  
  也就是说,如果把orm类的延迟加载设为false,那么即使我们再使用load() ,同样也不能延迟加载。
get()   &    load()方法的区别: 
  
相同点:
都可以从数据库中查询指定标识的对象。

不同点:
      load()方法查询的对象不存在时,比如一个不存在的主键,会抛出 org.hibernate.ObjectNotFoundException;
      load()方法应用了延迟加载机制。

      get()方法查询的对象不存在时,返回null;
      get()方法不采用延迟加载机制。
 
   延迟加载:
     当结果被调用的时候才执行,不调用不执行。  
     不使用延迟加载的get,在代码运行的过程中,不管后面结果被不会调用,都会执行并获取结果。
      load()延迟加载仅用于查询已知唯一记录的情况。

      与lazy的区别见上面5中的比较。

分享到:
评论

相关推荐

    基于SSH框架的BBS论坛JavaEE项目源码

    7.注册如果发送邮件激活的方式出错(返回页面错误org.hibernate.LazyInitializationException: could not initialize proxy - no Session) 8.禁止用户后不允许登录、发帖、回帖等 9.后台会员搜索中文名搜索乱码 ...

    集成spring的hibernate懒加载

    当你尝试在Controller层或者视图层访问懒加载的属性时,如果Session已经关闭("no Session..."错误),就会抛出`org.hibernate.LazyInitializationException`。这是因为懒加载的代理对象需要Session来执行数据库查询...

    Hibernate配置常见错误

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

    java开源论坛jeebbs系统源码包

    7.注册如果发送邮件激活的方式出错(返回页面错误org.hibernate.LazyInitializationException: could not initialize proxy - no Session) 8.禁止用户后不允许登录、发帖、回帖等 9.后台会员搜索中文名搜索乱码 ...

    derby.jar 。。

    java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40 导致的原因: 在azkaban的server和executor中缺少一个叫derby.jar的包

    Plsql 12连接Oracle时出现Could not initialize oci.dll解决方案 oracle 客户端

    在使用PL/SQL Developer 12连接Oracle数据库时,可能会遇到“Could not initialize oci.dll”这样的错误提示。这个错误通常表明系统无法找到或正确加载Oracle客户端的oci.dll库文件,这是Oracle Instant Client的一...

    Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser

    标题 "Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser" 提示了一个Java运行时错误,这通常意味着在尝试加载或初始化`JRStyledTextParser`类时遇到了问题。`JRStyledTextParser`是...

    S2S3H3整合以及泛型Dao与Service封装

    2.2.3.1+spring-framework-3.1.0+hibernate-distribution-3.6.8+JSON+MySQL+Annotation,并且对Dao和Service进行了封装,内含.jar包,并且解决了一对多双向关联的could not initialize proxy - no Session错误,同时...

    jasperreport maven打包后找不到字体解决方案

    jasperreport 用maven打包后找不到字体解决方案 net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font

    derby_ui_plugin_1.1.1

    Derby UI Plugin 1.1.1 是一个专门为Java开发者设计的用户界面插件,它在Java学习过程中能提供极大的便利。这个插件版本号为1.1.1,暗示了它可能包含了一些修复和改进,以提升用户体验和兼容性。...

    Android代码-RetrofitUrlManager

    // When building OkHttpClient, the OkHttpClient.Builder() is passed to the with() method to initialize the configuration OkHttpClient = RetrofitUrlManager.getInstance().with(new OkHttpClient.Builder...

    jacob_1.14.3.rar

    内涵jacob_1.14.3-x64.dll;jacob_1.14.3-64.jdk(maven地址);解决方法:Could not initialize class com.jacob.com.ComThread

    linux上实现视频截图

    在Linux操作系统上实现视频截图是一项常见的任务,尤其对于开发者来说,可能需要在处理多媒体内容时进行这样的操作。这里我们将深入探讨如何使用JavaCPP库在32位Linux环境下完成这一目标。 JavaCPP是一个强大的Java...

    mysql-5.7.17-winx64的安装、配置和初始化

    注意:如果仅使用`mysqld --initialize-insecure`可能会导致错误。 #### 六、注册MySQL为Windows服务 1. **安装服务**:同样在命令提示符中执行命令: ```cmd mysqld install MySQL --defaults-file="%MYSQL_HOME...

    oracle_plsql连服务端时 Initialization error could initialize错误处理方法

    解决:oracle_plsql连服务端时 Initialization error could initialize错误处理方法

    InstantClient-64bit-安装包-完美解决PL/SQL连接数据库提示oci.dll加载失败的问题

    标题中的“InstantClient-64bit-安装包”指的是Oracle的Instant Client,这是一个轻量级的客户端软件,用于连接到Oracle数据库,而无需完整的Oracle Database Client安装。它包含必要的库和组件,使得应用程序能够与...

    poi4.1.2以及所有依赖,源码,文档.zip

    org.apache.poi:poi:4.1.2 org.apache.poi:poi-ooxml:4.1.2 org.apache.poi:poi-ooxml-schemas:4.1.2 org.apache.xmlbeans:xmlbeans:3.1.0 ...commons-codec:commons-codec:1.13 org.apache.commons:commons-...

    mysql8.0 X64 安装文件和手动安装脚本

    D:\mysql-8.0.11-winx64\bin&gt;mysqld --initialize-insecure --console D:\mysql-8.0.11-winx64\bin&gt;mysqld --install mysql811 D:\mysql-8.0.11-winx64\bin&gt;net start mysql811 D:\mysql-8.0.11-winx64\bin&gt;mysql -u...

    Plsql Developer连接Oracle时出现Could not initialize oci.dll解决方案

    在使用PL/SQL Developer这款强大的Oracle数据库管理工具时,有时可能会遇到“Could not initialize oci.dll”的错误提示,这通常是由于应用程序与Oracle客户端组件之间的兼容性问题导致的。本文将详细介绍如何解决这...

Global site tag (gtag.js) - Google Analytics