前面已经提到了n+1问题,想了解n+1问题请访问hibernate缓存机制(一)-n+1问题。
此篇文章我们瞎扯一下hibernate的一级缓存、hibernate的一级缓存是怎么解决n+1的问题以及存在的弊端。
一、hibernate一级缓存:
1.Session 级别的缓存,它同session邦定。它的生命周期和session相同。Session消毁,它也同时消毁;管理一级缓存,一级缓存无法取消,用两个方法管理,clear(),evict()
2.两个session 不能共享一级缓存,因它会伴随session的生命周期的创建和消毁;
3.Session缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果使用HQL和SQL是查询属性级别的,是不使用一级缓存的!切记!!!!
我们来看看hibernate提供的一级缓存:
/** * 此时会发出一条sql,将所有学生全部查询出来,并放到session的一级缓存当中 * 当再次查询学生信息时,会首先去缓存中看是否存在,如果不存在,再去数据库中查询 * 这就是hibernate的一级缓存(session缓存)
|