Hibernate 中 get与load方法区别

原创 2007年10月12日 18:34:00

hibernate中get方法和load方法的根本区别在于:如果你使用load方法,hibernate认 为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时 才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异 常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存 看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。
对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

对于load和get方法返回类型:虽然好多书中都这么说:“get()永远只返回实体类”,但实际上这是不正确的,get方法如果在 session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是 原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是 返回的还是代理对象,只不过已经加载了实体数据。

get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。

总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。

 
版权声明:欢迎加入开源技术 Q 群:242561391,让学习和分享成为一种习惯!

Hibernate中get方法和load方法的区别

一、get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实...
  • flqljh
  • flqljh
  • 2015年11月14日 10:56
  • 4100

Hibernate中get和load方法的区别

这次我们来谈一下Hibernate3.2 Session加载数据时get和load方法的区别,其实这个在网上有很多的论述,可大多语焉不详或经不起实践的推敲,让很多初学者学的满腹疑窦,现在我给大家讲解一...
  • z69183787
  • z69183787
  • 2015年01月04日 17:28
  • 1297

Hibernate中Session.get()方法和load()方法的详细比较

1、get()方法直接返回实体类,如果查不到数据则返回null。load()会 返回一个实体代理对象(当前这个对象可以自动转化为实体对象), 但当代理对象被调用时,如果没有数据不存在,就会抛出个 or...
  • u010870518
  • u010870518
  • 2014年10月04日 15:56
  • 4198

Hibernate中get和load方法的区别

这次我们来谈一下Hibernate3.2 Session加载数据时get和load方法的区别(Hibernate 3以后的版本就用get()方法取代find()这个方法了),其实这个在网上有很多的论述...
  • liuzhe_2008
  • liuzhe_2008
  • 2014年06月16日 15:30
  • 352

Hibernate中load和get方法区别

hibernate中get方法和load方法的根本区别 最主要的区别,当用load查找不存在的记录时会返回ObjectNotFoundException, 如果用get查找时会返回null。 load...
  • purevegetable
  • purevegetable
  • 2014年12月10日 15:33
  • 415

Hibernate中get和load方法的区别<转>

第一篇 这次我们来谈一下Hibernate3.2 Session加载数据时get和load方法的区别(Hibernate 3以后的版本就用get()方法取代find()这个方法了),其实这个在网...
  • z_x_1000
  • z_x_1000
  • 2013年08月20日 15:11
  • 520

Hibernate中get和load方法的区别

从网上抄了两片。感觉不错,呵呵。 第一篇 这次我们来谈一下Hibernate3.2 Session加载数据时get和load方法的区别(Hibernate 3以后的版本就用...
  • xiaobukasi
  • xiaobukasi
  • 2013年03月20日 23:40
  • 226

Hibernate中get和load方法的区别

这次我们来谈一下Hibernate3.2 Session加载数据时get和load方法的区别(Hibernate 3以后的版本就用get()方法取代find()这个方法了),其实这个在网上有很多的论述...
  • smh821025
  • smh821025
  • 2012年02月07日 18:38
  • 638

Hibernate中get和load方法的区别以及close()、clear()、evict()

Hibernate中get和load方法的区别以及close()、clear()、evict() hibernate HibernateSQL  下边详细说一下get和loa...
  • hephec
  • hephec
  • 2014年12月25日 16:37
  • 647

Hibernate中get和load方法的区别

这次我们来谈一下Hibernate3.2 Session加载数据时get和load方法的区别,其实这个在网上有很多的论述,可大多语焉不详或经不起实践的推敲,让很多初学者学的满腹疑窦,现在我给大家讲解一...
  • zmx729618
  • zmx729618
  • 2016年04月29日 14:41
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 中 get与load方法区别
举报原因:
原因补充:

(最多只允许输入30个字)