Hibernate中用于获取数据的方法被有意识的分成2种分类:
1. 立刻加载方法: get list
2. 延迟加载方法: load iterate(select id from 表 where 条件 + n)
a)所谓的“立刻加载”就是首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数
据库中没有就返回null.(只要缓存中没有这条记录,就立刻查询数据库)
b)所谓的“延迟加载”就是在调用方法的时候并没有立刻查询数据库,而是等待"必须"查询点.
必须查询点: 自身没有的数据, 只有数据库那边才有。
get与load区别:
1. get是立刻加载 load是延迟加载,load的时候只是返回了一个proxy(代理)对象,
这个代理对象中只有id,没有其他数据.只有在触发必须查询点的时候才查询数据库。
2. get假如获取不到具体的数据, 接着对对象进行操作,报空指针异常
load假如获取不到具体的数据,报ObjectNotFoundException
3. get对1级缓存可读可写
load对1级缓存可读可写
list与iterate区别:
1. list是立刻查询 iterate使用延迟加载,有可能会产生n+1次查询
2. list对一级缓存是可写不可读
iterate对1级缓存可写也可读