首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用EclipseLink缓存

禁用EclipseLink缓存
EN

Stack Overflow用户
提问于 2011-12-03 19:09:25
回答 2查看 3.6K关注 0票数 5

在我的应用程序中,当用户登录到系统时,系统会从DB读取一些设置,并将它们存储在用户的会话中。系统通过使用EclipseLink (JPA2.0)的JPA查询执行此操作。

当我更改DB中的一些设置并再次登录时,查询将返回前面的结果。EclipseLink似乎正在缓存结果。

我用它来纠正这种行为,但是它不工作

代码语言:javascript
复制
query.setHint(QueryHints.cache_usage,cacheUsage.no_cache);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-05 02:12:12

如果要设置查询提示,文档建议执行:

代码语言:javascript
复制
query.setHint("javax.persistence.cache.storeMode", "REFRESH");

可以交替设置受影响实体的@Cacheable注释

代码语言:javascript
复制
@Cacheable(false)
public class EntityThatMustNotBeCached {
...
}
票数 8
EN

Stack Overflow用户

发布于 2011-12-04 12:39:40

如果要返回某种类型的配置实体,并且希望确保数据不过时,则可以在从查询中返回实体之后调用em.refresh(yourEntity)。这将迫使JPA提供程序在缓存的数据库中从数据库中获取新的数据。

如果要禁用L2缓存,可以在persistence.xml中的<persistence-unit>中使用<shared-cache-mode>NONE</shared-cache-mode>,也可以在配置实体上直接使用Cacheable(false)

如果您返回的是普通字段而不是实体,并且仍然得到陈旧的数据,则可以尝试通过调用PersistenceContext来清除em.clear()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8370203

复制
相关文章

相似问题

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