通过id获取Product对象有两种方式,分别是get和load 
他们的区别分别在于 
1. 延迟加载 
2. 对于id不存在的时候的处理

属性的延迟加载: 
当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进行查询。否则不会访问数据库

load方式是(属性)延迟加载,只有属性被访问的时候才会调用sql语句
get方式是非延迟加载,无论后面的代码是否会访问到属性,马上执行sql语句 

hibernate get和load详解

hibernate get和load详解

 很明显log3先输出的,执行到getName()时候才会去执行sql语句

返回值:

get()返回的是查询出来的实体对象,而load()查询出来的是一个目标实体的代理对象。

 

查询时机:

get()在调用的时候就立即发出SQL语句查询,而load()在访问非ID属性的时候才会发出查询语句并且将被代理对象target填充上,但是如果这个动作发生在Session被关闭后的话就会抛出LazyInitializationException。

 

查询结果为空时,比如id不存在的时候:

get()会返回null

load()抛出ObjectNotFoundException

hibernate get和load详解

 

hibernate get和load详解

 

相关文章: