Hibernate数据缓存分为两个层次,可分为内部缓存(Session Level)和二级缓存(SessionFactory Level)
在Hibernate中,缓存在以下情况下发挥作用:
1、通过id(主键)加载数据
包括根据id查询数据的Session.load方法等。
2、延迟加载
所谓延迟加载就是在需要数据的时候,才真正执行数据的加载操作。HIbernate2的延迟加载主要针对实体对象
和集合。Hibernate3提供了属性的延迟加载功能。
内部缓存
内部缓存在Hibernate中有称为一级缓存,属于应用事务级缓存。Session在内部维护了一个Map数据类型,此数据
类型中保持了所有的与当前Session相关联的数据对象,这个Map数据结构中维护了当前Session中所有持久化类的
状态。如果我们需要通过Session加载某个数据对象,Session首先会根据所要加载的数据类和id,在entityByKey(内
部的一个Map对象)中寻找是否已有此数据的缓存实现,如果存在且其判定为有效,则以此数据实例作为结果返回。
同样,如果Session从数据库中加载了数据,也会将其纳入Map结构加以管理。
二级缓存
二级缓存将由从属本SessionFactory的所有Session实例共享,因此有时被称为SessionFactory Level Cache。
Session在进行数据查询操作时,会首先在自身内部的一级缓存进行查找,如果一级缓存未能命中,则在二级缓存中
查找,如果二级缓存中命中,则以此数据作为结果返回。