通常咱们本身作一个简单对象缓存机制的话,我确定会用一个Map,map中保存的key使用类名+id的形式。hibernate提供的二级缓存的实现内部为HashtableCacheProvider,可是在生产环节最好不要用它。缓存
hibernate中对缓存的封装很是严实,其提供的缓存分为两级:安全
一级缓存:服务器
基于session级的缓存,save,updata,saveorUpdata,load,get,list等操做后的对象都会放入一级缓存,可是session以及缓存存在弊端,由于当咱们用户提交一个请求时,服务器会为该请求分发一个线程,并把事务操做绑定到当前线程上面,当咱们的操做完毕事务关闭后,session的一级缓存也会跟着消失,一个session一个缓存,这样就致使一级缓存不长久,不能共享。再者,一级缓存中没有使用任何的保护,咱们能够一直往里面添加数据,一直到内存的溢出,咱们不能控制缓存的数量,假如咱们一个劲的使用一级缓存,那么为了保证安全,咱们应该及时的清理一级缓存。session
二级缓存:框架
基于sessionFactory级别的缓存,二级缓存有不少框架能够实现,要作一个严谨的缓存有必定的难度,hibernate应用中通常把二级缓存的管理交给第三方的框架来处理,可是hibernate也提供了二级缓存的实现,可是它内部为HashtableCacheProvider来实现的,下面简单的介绍一下二级缓存的简单配置。ide
首先开启二级缓存,明确用哪一个框架来实现,咱们这里用osCacheProvider。hibernate
hibernate.cache.use_second_level_cache = true
hibernate.cache.provider_class = org.hibernate.cache.OSCacheProvider
hibernate.generate_statistics = true线程
<class-cache class="类的全名" usage="read-only"/>对象
还能够在映射文件中写入事务
<cache usage="read-only"/>