Hibernate查询缓存会在外部更新时自动刷新吗?

art*_*gon 12 java orm caching hibernate

我正在创建一个对数据库具有只读访问权限的服务.我在Hibernate中有一个查询缓存和二级缓存(READ_ONLY模式)来加速服务,因为被访问的表很少变化.

我的问题是,如果有人进入数据库并手动更改表(即在Hibernate之外),缓存是否会自动识别需要清除它?缓存有时间限制吗?

Aff*_*ffe 8

不,当基础数据发生变化时,缓存不会扫描数据库,让您神奇地自我更新.未通过L2缓存的更改不会出现在其中.超时等等多长时间取决于您的提供商以及默认设置.看起来默认的ehcache.xml是2分钟.


Pas*_*ent 8

如果您没有通过Hibernate API进行更改,则不会通知第二级缓存,并且不会显示更改.处理这种情况的常用方法是以编程方式从二级缓存中逐出相应的对象以强制刷新.该SessionFactory规定允许这样做的方法.从第19.3.管理 文档的缓存:

对于二级缓存,定义了SessionFactory 用于驱逐实例,整个类,集合实例或整个集合角色的缓存状态的方法.

sessionFactory.evict(Cat.class, catId); //evict a particular Cat
sessionFactory.evict(Cat.class);  //evict all Cats
sessionFactory.evictCollection("Cat.kittens", catId); //evict a particular 
                                                      //collection of kittens
sessionFactory.evictCollection("Cat.kittens"); //evict all kitten collections
Run Code Online (Sandbox Code Playgroud)