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() ...
随机推荐
- <转>cookie和缓存解析
原文来自:http://www.cnblogs.com/cuihongyu3503319/archive/2008/04/18/1160083.html 缓存cache 为了提高访问网页的速度,浏览器 ...
- iOS开发那些事--性能优化–内存泄露问题的解决(转)
内存泄漏问题的解决 内存泄漏(Memory Leaks)是当一个对象或变量在使用完成后没有释放掉,这个对象一直占有着这块内存,直到应用停止.如果这种对象过多内存就会耗尽,其它的应用就无法运行.这个问题 ...
- asp.net mvc开发的社区产品相关开发文档分享
分享一款基于asp.net mvc框架开发的社区产品--近乎.目前可以在官网免费下载,下载地址:http://www.jinhusns.com/Products/Download?type=whp 1 ...
- 实现Foreach遍历
实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口 using System; using System.Collect ...
- IE浏览器打开 「兼容性视图」
有些IE上的网页控件需要打开兼容性视图才能使用,不知道是Javascript的原因,还是CSS的原因. 使用环境是用C语言配合boa服务器实现的CGI程序.
- L013-oldboy-mysql-dba-lesson13
L013-oldboy-mysql-dba-lesson13 02 18:00 来自为知笔记(Wiz)
- ALI OSS RequestTimeTooSkewed
php版阿里oss sdk,请求时抛RequestTimeTooSkewed错误,说时间差距太大,搜了一下发现是服务器的时间设置问题. 我们在安装完Centos Linux操作系统之后,点击系统的时间 ...
- ASP.NET 发送电子邮件简介
1.补充知识 (1)POP3和SMTP服务器是什么? 简单点来说:POP3 用于接收电子邮件 ,SMTP 用于发送电子邮件. (1)POP3具体指什么? POP3(Post Office Protoc ...
- asp:HyperLink vs asp:LinkButton
asp:HyperLink NavigateUrl - 页面刷新为新的页面 pageload ispostback = false asp:LinkButton PostbackUrl - postb ...
- javascript实现暂停
<!DOCTYPE HTML><html> <head> <title> New Document </title> <meta ...