如何操作Hibernate配置中定义的缓存

Hibernate通过配置项 hibernate.cache.provider_class 来指定所采用的Cache API,但是在Hibernate所提供对缓存操作方法都是一些高层的API,也就是说Hibernate提供对缓存的操作方法都是基于对象的操作,例如

session.evict(Object obj);
SessionFactory.evictXxxx

但有时候这些方法并不能完成我们想要的功能时,因此我们需要直接操控缓存来达到我们想要的目的。

挨个打开Hibernate的源代码发现了有一个类Settings,这个类有一个getCacheProvider方法,而通过SessionFactoryImpl类可以获取Settings的实例。从字面上来可以猜出SessionFactoryImpl就是对接口SessionFactory的实现,而getCacheProvider就是用来获取缓存管理器的实例,经过一番试验证实了以上猜测。

接下来可以在Hibernate的初始化时做点手脚来获取CacheProvider实例:

Configuration cfg = new Configuration().configure(cfg_path);
//将buildSessionFactory返回的对象强制转为SessionFactoryImpl类型
SessionFactoryImpl sessionFactory = (SessionFactoryImpl)cfg.buildSessionFactory();
this.cacheProvider = sessionFactory.getSettings().getCacheProvider();

这样我们就拿到了CacheProvider实例,接下来再看看CacheProvider接口,该接口是通过buildCache(String name, Properties props)方法来创建缓存的
也就是说我们还需要一个参数就是props,这个参数就是Hibernate的配置信息,再次阅读SessionFactoryImpl源码便可知道通过Configuration类来获取配置信息

所以最终完整的代码是:

Configuration cfg = new Configuration().configure(cfg_path);
SessionFactoryImpl ssnFactory = (SessionFactoryImpl)cfg.buildSessionFactory();
CacheProvider cacheProvider = ssnFactory.getSettings().getCacheProvider();
Cache cache = cacheProvider.buildCache("cache_name", cfg.getProperties());
cache.get(xxxxx);
cache.set(xxxx,xxxx);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值