【问题标题】:Eclipselink Individual Class Cache ConfigurationEclipselink 单个类缓存配置
【发布时间】:2013-11-19 21:20:38
【问题描述】:

我向现有类 (MyClass) 添加了一个新的布尔字段 (myFlag)。

在 JSP 方面,我添加了以下代码(myClassObject 作为请求属性传递)。

<span onclick="toggleMyFlag()">
    <c:choose>
        <c:when test="${myClassObject.myFlag}">
            <c:out value="TRUE" />
        </c:when>
        <c:otherwise>
            <c:out value="FALSE" />
        </c:otherwise>
    </c:choose>
</span>

span被点击时,实体上的标志被成功切换(我可以查看数据库中的变化等)。

但是,当页面重新加载时,TRUE 或 FALSE 输出没有正确更新(它们保持不变)。刷新页面不起作用。注销并重新登录不会。并且关闭浏览器不会。它似乎修复自己的唯一方法是重新启动本地服务器。

我尝试了以下方法,但没有成功。

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

我还在查询中尝试了以下方法,但还是没有运气。

query.setHint(QueryHints.REFRESH, HintValues.TRUE);

然后我发现,如果我将以下属性(persistence.xml)更改为 false,则该功能起作用。

<property name="eclipselink.cache.shared.default" value="true"/>

但是,我不想像那样关闭所有缓存。

我对 EclipseLink 一无所知,所以我想知道是否可以只为 MyClass 关闭缓存。

【问题讨论】:

    标签: java jsp caching eclipselink


    【解决方案1】:

    我没有您的代码可以推荐以下哪一个肯定适合您,但您可以根据需要/代码尝试以下三个选项:

    em.createNamedQuery("MyLocation.findMyLoc").setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache).getResultList().get(0);
    
    @Entity
    @Cache(isolation=ISOLATED)
    public class Employee {
      ...
    }
    
    Or the JPA 2.0 @Cacheable annotation:
    
    @Entity
    @Cacheable(false)
    public class Employee {
      ...
    }
    

    source 1 , source 2

    【讨论】:

    • @Cache(false)@Cache(isolation=ISOLATED) 都没有编译。看起来我们正在使用 EclipseLink 2.1.3。遗憾的是,查询提示不起作用。
    • 我刚刚尝试了@Cache(alwaysRefresh=true)(它确实编译了),但没有成功。
    • 带有 "CacheUsage.DoNotCheckCache" 的 NameQuery 怎么样?你也试过了吗?
    • 我做了,没有。这就是我在第一条评论中所说的“查询提示”的意思。虽然查询是通过createNativeQuery 完成的。不知道这是否有影响。
    猜你喜欢
    • 2010-10-09
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多