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方法的更多相关文章

  1. SSH实战 · 用spring框架下的hibernatetemplate的get方法出现的问题

    用get方法查询:      return this.getHibernateTemplate().get(Product.class, pid); 出现错误为:id to load is requi ...

  2. 你真的了解load方法么?(转载)

    本文授权转载,作者:左书祺(关注仓库,及时获得更新:iOS-Source-Code-Analyze) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Ma ...

  3. initialize和init以及load方法的区别与使用以及什么时候调用

    initialize不是init initialize在这个类第一次被调用的时候比如[[class alloc]init]会调用一次initialize方法,不管创建多少次这个类,都只会调用一次这个方 ...

  4. jQuery load()方法用法集锦!

    调用load方法的完整格式是:DE>load( url, [data], [callback] ),其中DE> DE>urlDE>:是指要导入文件的地址. DE>data ...

  5. easyUi load方法重新加载表单的数据

    1.表单回显数据的方法 <script> //方法一 function loadLocal(){ $('#ff').form('load',{ name:'myname', email:' ...

  6. load()方法---------jQuery动态加载html

    jquery代码 $("#div").load("test.html"); test.html   ----------------被加载页面(有<HTM ...

  7. Hibernate框架之get和load方法的区别

    我们在学习Hibernate框架时,经常会进行修改,删除操作,对于这些操作,我们都应该先加载对象,然后在执行或删除的操作,那么这里Hibernate提供了两种方法按照主键加载对象,也就是我要说的get ...

  8. 在 ASP.NET 中使用 jQuery.load() 方法

    今天就让我们看看在 ASP.NET 中使用 jQuery.load() 方法来调用 ASP.NET 的方法,实现无刷新的加载数据. 使用 jQuery 的朋友应该知道可以使用 jQuery.load( ...

  9. DataTable .Load 方法 (IDataReader)

    DataTable .Load 方法 (IDataReader)用来从DataReader对象中填充DataTable所需的数据 public DataTable GetAllInventory() ...

随机推荐

  1. <转>cookie和缓存解析

    原文来自:http://www.cnblogs.com/cuihongyu3503319/archive/2008/04/18/1160083.html 缓存cache 为了提高访问网页的速度,浏览器 ...

  2. iOS开发那些事--性能优化–内存泄露问题的解决(转)

    内存泄漏问题的解决 内存泄漏(Memory Leaks)是当一个对象或变量在使用完成后没有释放掉,这个对象一直占有着这块内存,直到应用停止.如果这种对象过多内存就会耗尽,其它的应用就无法运行.这个问题 ...

  3. asp.net mvc开发的社区产品相关开发文档分享

    分享一款基于asp.net mvc框架开发的社区产品--近乎.目前可以在官网免费下载,下载地址:http://www.jinhusns.com/Products/Download?type=whp 1 ...

  4. 实现Foreach遍历

    实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口 using System; using System.Collect ...

  5. IE浏览器打开 「兼容性视图」

    有些IE上的网页控件需要打开兼容性视图才能使用,不知道是Javascript的原因,还是CSS的原因. 使用环境是用C语言配合boa服务器实现的CGI程序.

  6. L013-oldboy-mysql-dba-lesson13

    L013-oldboy-mysql-dba-lesson13 02 18:00 来自为知笔记(Wiz)

  7. ALI OSS RequestTimeTooSkewed

    php版阿里oss sdk,请求时抛RequestTimeTooSkewed错误,说时间差距太大,搜了一下发现是服务器的时间设置问题. 我们在安装完Centos Linux操作系统之后,点击系统的时间 ...

  8. ASP.NET 发送电子邮件简介

    1.补充知识 (1)POP3和SMTP服务器是什么? 简单点来说:POP3 用于接收电子邮件 ,SMTP 用于发送电子邮件. (1)POP3具体指什么? POP3(Post Office Protoc ...

  9. asp:HyperLink vs asp:LinkButton

    asp:HyperLink NavigateUrl - 页面刷新为新的页面 pageload ispostback = false asp:LinkButton PostbackUrl - postb ...

  10. javascript实现暂停

    <!DOCTYPE HTML><html> <head>  <title> New Document </title>  <meta ...