首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPQL不能阻止JPQL查询的缓存

JPQL不能阻止JPQL查询的缓存
EN

Stack Overflow用户
提问于 2020-08-09 05:42:23
回答 2查看 39关注 0票数 0

两个(JSF + JPA + EclipseLink + MySQL)应用程序共享同一个数据库。一个应用程序运行调度任务,另一个应用程序为调度创建任务。第一个应用程序创建的任务由第二个应用程序中的查询收集,没有任何问题。第二个应用程序更新任务中的字段,但第二个应用程序所做的更改在JPQL查询时不会刷新。

我已经添加了QueryHints.CACHE_USAGE作为CacheUsage.DoNotCheckCache,但是,最新的更新不会反映在查询结果中。

代码如下所示。

如何从JPQL查询中获得对数据库的最新更新?

代码语言:javascript
运行
复制
public List<T> findByJpql(String jpql, Map<String, Object> parameters, boolean withoutCache) {
    TypedQuery<T> qry = getEntityManager().createQuery(jpql, entityClass);
    Set s = parameters.entrySet();
    Iterator it = s.iterator();
    while (it.hasNext()) {
        Map.Entry m = (Map.Entry) it.next();
        String pPara = (String) m.getKey();
        if (m.getValue() instanceof Date) {
            Date pVal = (Date) m.getValue();
            qry.setParameter(pPara, pVal, TemporalType.DATE);
        } else {
            Object pVal = (Object) m.getValue();
            qry.setParameter(pPara, pVal);
        }
    }
    if(withoutCache){
        qry.setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache);
    }
    return qry.getResultList();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-10 23:06:37

CacheUsage设置会影响EclipseLink可以使用内存中的内容进行查询的内容,但不会影响它访问数据库以获取结果后发生的情况。

看起来你不想直接避开缓存,但我假设你应该刷新它,这样最新的更改就可以看到了。当涉及多个应用程序和缓存级别时,这是一种非常常见的情况,因此您可能需要考虑许多不同的解决方案,例如手动无效,或者即使两个应用程序都是基于JPA的,缓存协调(因此一个应用程序甚至可以向另一个应用程序发送无效)。或者,您可以使用"eclipselink.refresh"查询提示对特定查询进行控制,这将强制查询使用从数据库返回的内容重新加载缓存对象中的数据。请小心使用它,就像在本地EntityManager中使用一样,查询返回的任何修改的实体也将被刷新,更改将丢失

缓存的引用:

https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching

https://www.eclipse.org/eclipselink/documentation/2.6/concepts/cache010.htm

票数 1
EN

Stack Overflow用户

发布于 2020-08-09 06:11:04

通过添加以下行,使实体不依赖于缓存。

代码语言:javascript
运行
复制
@Cache(
  type=CacheType.NONE, // Cache nothing
  expiry=0,
  alwaysRefresh=true
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63320481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档