hibernate的load与get的区别

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缓存的时候入没有数据是跳过二级缓存,直接查询数据库中的数据。

原文地址:https://www.cnblogs.com/gxpblogs/p/3080898.html