对于get方法,hibernate查找数据的顺序是先在session缓存中查找,如果没有,就到二级缓存中查找,如果没有,再到数据库中查找,数据库中如果没有就返回null。3.2版本及以上的get方法查找二级缓存。
load方法首先在session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象。等到具体使用的时候在查询二级缓存和数据库,如没有记录,则抛出ObjectNotFoundException。如果查询时session已经关闭,则会抛出no session的异常。
总而言之,get方法hibernate一定要获取真实的数据,否则返回null。load方法,hibernate认为该数据在数据库中一定存在的,如果在在查询过程中发现了问题,只能抛出异常,不会返回一个结果。