集册 Hibernate 高级教程 Hibernate:get和load

Hibernate:get和load

—— load和get的简单介绍

欢马劈雪     最近更新时间:2020-08-04 05:37:59

504

  • load代表的是采用延迟加载方法,即当我们采用load()方法加载一个对象时,并不会发送SQL语句,得到的只是一个包含了实体对象ID值的代理对象,只有当我们使用具体属性时候,才会发送SQL语句。
  • get则非常直白,当我们通过get方法的时候,不管后边怎样,就先通过SQL将该对象查询出来,也就是常说的立即加载。
  • 使用load的加载方式要比get的加载方式性能好一点,因为load加载的时候,只是得到一个代理对象,当真正需要的时候才会去查询。这也代表了延迟加载与立即加载的同比。

小Tips


1、get()方法来加载对象,当我们试图得到一个id不存在的对象时候,会报空指针异常,也就是NullPointException。

2、load()方法来加载对象,如果id不存在,若我们不使用该对象的任何属性,啥事没有;但如果需要使用属性(也就是真正的去查询该对象),会报异常,但该异常并不是空指针,而是ObjectNotFoundException。

为啥呢?还是因为延迟加载,得到的是仅包含ID的代理对象;虽然我们在使用具体的属性时候,会发送SQL语句去进行查询,但却查询不到结果,这个就好尴尬。所以你要查询的属性是不存在的,所以会报ObjectNotFoundException。

3、关于load还有一点比较重要,就是LazyInitializationException(懒加载异常,用过Hibernate的应该都会接触过N次)。

其原因还是因为延迟加载!我们通过load方法得到了代理对象,但此时我们的session关闭了,但我们的对象还是存在的啊,所以当我们准备使用该对象属性的时候,就会报LazyInitializationException异常了。Session都关了,我还怎么去初始化= =

想到的一个SSH整合的事情


展开阅读全文