首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一口一结巴掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别

2013-10-09 
一口一口吃掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别最近在学习

一口一口吃掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别

      最近在学习SHH框架中的Hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深。所以百度了一下,结果问题来了。百度的结果和实际测试的结果出入很大。主要是对get方法的说法跟实际运行的结果不一致。


      先说一下观点吧:

get不支持lazy,load支持lazy;数据不存在时,get返回null,load则抛出ObjectNotFoundException异常。load方法可以返回实体的代理类实例,而get方法直接读取数据库,所以直接返回实体类(get的这个说法是错误的)

      对于第一条,相信大家都没有太多的疑问。我这里给个例子稍作解释:lazy意味着用的时候才去执行sql语句。



      还有一个有趣的现象:
User user5 = (User)session.load(User.class, "123");     System.out.println(user5.getId());
      运行结果直接输出 123      从结果中也可以看出,前2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是Id的值,但是当你getId()时,它会去一级缓存里拿map的key值,正好找到了,所以不会再去执行数据库查询。也不会报任何错。就有了以上的结果。

热点排行