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中的比较。
分享到:
相关推荐
解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...
7.注册如果发送邮件激活的方式出错(返回页面错误org.hibernate.LazyInitializationException: could not initialize proxy - no Session) 8.禁止用户后不允许登录、发帖、回帖等 9.后台会员搜索中文名搜索乱码 ...
7.注册如果发送邮件激活的方式出错(返回页面错误org.hibernate.LazyInitializationException: could not initialize proxy - no Session) 8.禁止用户后不允许登录、发帖、回帖等 9.后台会员搜索中文名搜索乱码 ...
java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40 导致的原因: 在azkaban的server和executor中缺少一个叫derby.jar的包
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错误,同时...
NULL 博文链接:https://smartgwt.iteye.com/blog/1252268
之前编译安装的LNMP环境+phpmyamdin4.02的版本,今天突然出现这个问题:复制代码 代码如下:Fatal error: session_start(): Failed to initialize storage module: files (path: ) in /data/...大致意思是session会话...
在学java2的用户,不妨看看
内涵jacob_1.14.3-x64.dll;jacob_1.14.3-64.jdk(maven地址);解决方法:Could not initialize class com.jacob.com.ComThread
主要介绍了Plsql Developer连接Oracle时出现Could not initialize oci.dll解决方案,需要的朋友可以参考下
D:\mysql-8.0.11-winx64\bin>mysqld --initialize-insecure --console D:\mysql-8.0.11-winx64\bin>mysqld --install mysql811 D:\mysql-8.0.11-winx64\bin>net start mysql811 D:\mysql-8.0.11-winx64\bin>mysql -u...
解决:oracle_plsql连服务端时 Initialization error could initialize错误处理方法
如图,用管理员运行,在命令行窗口输入mysqld --initialize --console,执行初始化命令,出现了mysqld: Can’t create directory ‘D: ystem tool\mysql-8.0.19-winx64\Database’ (OS errno 2 – No such
* Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to * creating any uC/OS-II object and, prior to calling OSStart(). * * Arguments : none * * ...
// When building OkHttpClient, the OkHttpClient.Builder() is passed to the with() method to initialize the configuration OkHttpClient = RetrofitUrlManager.getInstance().with(new OkHttpClient.Builder...
监听COM口启动程序报错 Could not initialize class gnu.io.RXTXCommDriver异常 是因为需要在%JAVA_HOME%/jre/bin目录中添加rxtxParallel.dll、rxtxSerial.dll文件
以管理员权限打开cmd,然后进入E:\study\mysql-5.7.15-winx64\bin文件夹输入以下命令:mysqld --initialize (用于初始化mysql,MySQL会帮你自动进行初始化,例如生成data文件夹) 再输入:mysqld install(安装...
Fatal error: session_start() [function.session-start]: Failed to initialize storage module: files (path: ) in C:\usr\phpMyAdmin\libraries\session.inc.php on line 75 I.更改服务器配置: 1、检查error.log...
JSONArray.fromObject(map)报错:Could not initialize class net.sf.json.JsonConfig。ireport 需要高于2.1版本的包。于是就找了这些包。最后2.2.2适合
spring 总的概述。。。入门好教程~~~~~~~~~~~~~