1.延迟加载
load是true而get是false
即:load采用的是延迟加载的方式;而get不是。
hibernate思想是:既然这个方法支持延迟加载 他就认为这个对象一定在数据库存在,在你声明
User u = (User) session.get(User.class, id);
这句时候,hibernate就干了一件事--->查询session缓存,如果缓存中没有这个对象,那就创建个代理。(因为延迟加载需要代理来执行 所以就创建了个代理。)
load访问数据库的时候,load默认为加载的数据数据库一定存在数据库中,返回的是一个代理实体,而不是一个真正的类实例,
2.查询顺序
load首先查询session缓存,如果找到,返回代理实体;没有找到,就到二级缓存中间进行查找;如果还是没有,就创建代理实例到数据库中间查找,还是没有的话返回objectnotfoundexception异常;
get也是首先查找session缓存,如果session缓存中间没有,越过二级缓存,直接查找数据库,如果数据库没有数据的话,返回null。
3.返回类型
load()方法可返回实体的代理类实例;
而get方法永远直接返回实体类。
// ......... 注意 get在查询session缓存的时候入没有数据是跳过二级缓存,直接查询数据库中的数据。