手动更新数据库后清除Hibernate 2级缓存

手动更新数据库后清除Hibernate 2级缓存,第1张

手动更新数据库后清除Hibernate 2级缓存

根据Hibernate
JavaDoc
,您可以使用

org.hibernate.Cache.evictAllRegions()

evictAllRegions()从缓存中逐出所有数据。

使用Session和SessionFactory:

Session session = sessionFactory.getCurrentSession();if (session != null) {    session.clear(); // internal cache clear}Cache cache = sessionFactory.getCache();if (cache != null) {    cache.evictAllRegions(); // Evict data from all query regions.}

1)如果您只需要更新一个实体(如果直接从数据库中更新,您将只更新某些实体),而不是整个会话,则可以使用

evictEntityRegion(ClassEntityClass)从给定区域驱逐所有实体数据(即

2)如果您有很多实体,可以直接从db更新,则可以使用此方法从第二级缓存中逐出所有实体(我们可以通过JMX或其他管理工具向管理员公开此方法):

public void evict2ndLevelCache() {    try {        Map<String, Classmetadata> classesmetadata = sessionFactory.getAllClassmetadata();        Cache cache = sessionFactory.getCache();        for (String entityName : classesmetadata.keySet()) { logger.info("Evicting Entity from 2nd level cache: " + entityName); cache.evictEntityRegion(entityName);        }    } catch (Exception e) {        logger.logp(Level.SEVERE, "SessionController", "evict2ndLevelCache", "Error evicting 2nd level hibernate cache entities: ", e);    }}

3)另一种方法被描述这里的PostgreSQL +Hibernate的,我觉得你可以做同样的事情甲骨文这样的



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5085849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存