Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中
SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓
存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。
SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是
SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集
合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义
SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在
Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存
是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此
SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的
外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个
插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬
盘。SessionFactory的外置缓存也被称为Hibernate的第二级缓存。
一级缓存很短和 session 的生命周期一致,一级缓存也叫 session 级的缓存或 事务级缓存
二级缓存 Hibernate 的 Session 在事务级别进行持久化数据的缓存操作。
hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。
二级缓存是SessionFactory级别的全局缓存,它底下可以使用不同的缓存类库,比如ehcache、oscache等,需要设置hibernate.cache.provider_class