hibernateTemplate的load方法
hibernateTemplate的load方法采用延迟加载,所以应当注意。
如果配置不当,采用此方法获取对象,往往会出现异常:
javax.servlet.ServletException: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
出现此异常一般是因为session已关闭,无法获取对象。
测试代码:
以下是部门的实现类DeptDaoImpl的一个方法——通过部门id获取指定部门
public Dept findById(int did) {
return hibernateTemplate.load(Dept.class, did);
}
以下是DeptService中相应的方法
public Dept findById(int id){
return deptDaoImpl.findById(id);
}
测试类测试此方法,出现异常:javax.servlet.ServletException: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
分析:为什么此处会出现异常呢?这是因为执行Dept d= deptService.findById(156);这一句后session已关闭,且因为在DeptDaoImpl采用的load的方法——延迟加载,它并不会从数据库中加载id为156的这个部门,因此执行System.out.println(d.getDname());出现此异常。
@Test
public void getDeptById(){//load
//error
Dept d= deptService.findById(156);
System.out.println(d.getDname());
}
下面将 System.out.println(d.getDname());这句代码放在DeptService进行测试
public void test(int id){
Dept d=deptDaoImpl.findById(id);
System.out.println(d.getDname());
}
成功,打印信息:
| 技术部 |
分析:为什么能在DeptService能够获得指定部门的部门名称呢?
——这是因为在spring的配置文件中(spring.xml)中对service中的方法进行了aop管理,所以在执行 System.out.println(d.getDname());时session并未关闭,因此可以打印信息(此外需说明的是,在执行 Dept d=deptDaoImpl.findById(id);语句时,session并未与数据库交互,执行System.out.println(d.getDname())才向数据库发送相应SQL——这是因为load方法采用延迟加载。)
解决方法:
若采用load方法,需配置opensessioninview,这样就可以了。
hibernateTemplate的load方法的更多相关文章
- SSH实战 · 用spring框架下的hibernatetemplate的get方法出现的问题
用get方法查询: return this.getHibernateTemplate().get(Product.class, pid); 出现错误为:id to load is requi ...
- 你真的了解load方法么?(转载)
本文授权转载,作者:左书祺(关注仓库,及时获得更新:iOS-Source-Code-Analyze) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Ma ...
- initialize和init以及load方法的区别与使用以及什么时候调用
initialize不是init initialize在这个类第一次被调用的时候比如[[class alloc]init]会调用一次initialize方法,不管创建多少次这个类,都只会调用一次这个方 ...
- jQuery load()方法用法集锦!
调用load方法的完整格式是:DE>load( url, [data], [callback] ),其中DE> DE>urlDE>:是指要导入文件的地址. DE>data ...
- easyUi load方法重新加载表单的数据
1.表单回显数据的方法 <script> //方法一 function loadLocal(){ $('#ff').form('load',{ name:'myname', email:' ...
- load()方法---------jQuery动态加载html
jquery代码 $("#div").load("test.html"); test.html ----------------被加载页面(有<HTM ...
- Hibernate框架之get和load方法的区别
我们在学习Hibernate框架时,经常会进行修改,删除操作,对于这些操作,我们都应该先加载对象,然后在执行或删除的操作,那么这里Hibernate提供了两种方法按照主键加载对象,也就是我要说的get ...
- 在 ASP.NET 中使用 jQuery.load() 方法
今天就让我们看看在 ASP.NET 中使用 jQuery.load() 方法来调用 ASP.NET 的方法,实现无刷新的加载数据. 使用 jQuery 的朋友应该知道可以使用 jQuery.load( ...
- DataTable .Load 方法 (IDataReader)
DataTable .Load 方法 (IDataReader)用来从DataReader对象中填充DataTable所需的数据 public DataTable GetAllInventory() ...
随机推荐
- 踩到两只“bug”
近期在修复ex和头儿的代码时,碰到两个特别点的bug,其实也不能称之为bug,非常简单的用法,稍不严谨点可能就出错了. 第一个是in_array,大家都知道功能是检查一个值是否在数组中,第三个参数传入 ...
- Linux 命令 - free: 显示系统的内存信息
命令格式 free [-b | -k | -m] [-o] [-s delay ] [-t] [-l] [-V] 命令参数 -b 显示内存的单位为 Byte. -k 显示内存的单位为 KB. -m 显 ...
- Git CMD - tag: Create, list, delete or verify a tag object signed with GPG
命令格式 git tag [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>] <tagname> [& ...
- 海量小文件存储与Ceph实践
海量小文件存储(简称LOSF,lots of small files)出现后,就一直是业界的难题,众多博文(如[1])对此问题进行了阐述与分析,许多互联网公司也针对自己的具体场景研发了自己的存储方案( ...
- DOS批处理命令-goto命令
goto是一个流程控制语句 rem goto语句是一个大家都不怎么喜欢的语句,因为他的随意性太强,导致可维护性大大的降低. 语法: goto [lable] [lable]是bat程序中任意定义的 ...
- 如何设置win7任务栏的计算机快速启动
win7默认会有一个资源管理器的快速启动栏,但是点击的时候会打开“库”,你可能一般不会用这个库,想打开计算机怎么办呢? 其实很简单,再按住shift的同时右键资源管理器的这个快速启动项,然后会出现菜单 ...
- (转)java:快速文件分割及合并
文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...
- (转)实战Memcached缓存系统(5)Memcached的CAS程序实例
1. 非CAS 首先看一个不是CAS的Memcached程序实例.实例的问题原型,见上一篇博文. 程序实例: package com.sinosuperman.memcached; import ja ...
- CSS的兼容性解决方案
什么是兼容性? 同一个网页,在不同浏览器下(IE6.IE7.IE8)下的显示效果不一致,这就是说"CSS不兼容". IETESTer可以同时测试IE5.5.IE6.IE7.IE8这 ...
- Java的导入与导出Excel
使用Jakarta POI导入.导出Excel Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和 ...