C/C++教程

孙卫琴的《精通JPA与Hibernate》的读书笔记:在程序中控制第二级缓存Cache

本文主要是介绍孙卫琴的《精通JPA与Hibernate》的读书笔记:在程序中控制第二级缓存Cache,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

EntityManager的detach()方法用于从第一级缓存中清除一个特定的对象。对于第二级缓存,JPA API提供了javax.persistence.Cache接口,它具有控制第二级缓存的evict()方法,能从第二级缓存的实体数据缓存中删除特定的数据。

javax.persistence.Cache接口只能控制实体数据缓存。如果要控制其他类型的缓存,需要使用Hibernate API提供的org.hibernate.Cache接口。

以下controlCache()方法演示了JPA API以及Hibernate API的Cache接口的用法:

public void controlCache(){
  //Cache接口来自于JPA API的javax.persistence包
  Cache cache = entityManagerFactory.getCache();

  if(cache.contains(Customer.class, Long.valueOf(1))){
    //清除实体数据缓存中的特定Customer对象 
    cache.evict(Customer.class, Long.valueOf(1));
  }

  //清除实体数据缓存中的所有Customer对象
  cache.evict(Customer.class);

  //清楚实体数据缓存中的所有数据
  cache.evictAll();

  //使用来自Hibernate API的Cache接口
  org.hibernate.Cache hibernateCache =
            cache.unwrap(org.hibernate.Cache.class);

  if(hibernateCache.containsEntity(Customer.class, 
                                     Long.valueOf(1))){
     //清除实体数据缓存中的特定Customer对象
     hibernateCache.evictEntityData(Customer.class, 
                                           Long.valueOf(1));
  }

  hibernateCache.evictEntityData();  //清空实体数据缓存区域
  hibernateCache.evictCollectionData();  //清空集合缓存区域
  hibernateCache.evictNaturalIdData(); //清空自然主键缓存区域
  hibernateCache.evictQueryRegions();  //清空查询缓存区域
}

在这里插入图片描述

这篇关于孙卫琴的《精通JPA与Hibernate》的读书笔记:在程序中控制第二级缓存Cache的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!