【问题标题】:JPA eclipselink cache refresh automaticallyJPA eclipselink缓存自动刷新
【发布时间】:2012-12-17 11:44:38
【问题描述】:

当前使用 eclipselink JPA 提供程序来访问后端实体。我正在使用命名查询来访问数据并使用以下查询缓存选项。

@NamedQueries({
@NamedQuery(name = Supplier.FIND_ALL, query = "select o from Supplier o",hints={
      @QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE),          
      @QueryHint(name = QueryHints.QUERY_RESULTS_CACHE, value = HintValues.TRUE),
      @QueryHint(name = QueryHints.CACHE_STATMENT, value = HintValues.TRUE),
      @QueryHint(name = QueryHints.CACHE_STORE_MODE, value = "REFRESH"),
      @QueryHint(name = QueryHints.CACHE_RETRIEVE_MODE,value=CacheUsage.CheckCacheThenDatabase),
      }),
})

我也在实体上使用以下缓存选项。

@Cache(refreshOnlyIfNewer=true,
coordinationType=CacheCoordinationType.SEND_OBJECT_CHANGES,alwaysRefresh=true)

查询似乎第一次需要一段时间,但对于进一步的检索来说非常快(QueryHints.QUERY_RESULTS_CACHE, value = HintValues.TRUE 的 b'cozs )。但似乎随后对数据库的任何更改都没有反映在输出中。似乎缓存没有被刷新,并且对数据库的更新更改没有反映在输出中。

同样需要帮助。

谢谢, 克里希纳

【问题讨论】:

    标签: jpa eclipselink


    【解决方案1】:

    你的设置没有多大意义。

    QueryHints.QUERY_RESULTS_CACHE 是启用查询缓存的正确方法。但是你不应该设置其他的,

    QueryHints.CACHE_STATMENT - 这是 JDBC 语句缓存,在查询中设置它很奇怪,通常这是为 DatabaseSource 中的所有语句配置的,如果使用 EclipseLink 连接池,则为持久单元配置。

    QueryHints.CACHE_STORE_MODE - 我不确定这是否有意义,您无法刷新和缓存查询。

    QueryHints.CACHE_RETRIEVE_MODE,value=CacheUsage.CheckCacheThenDatabase,这没有意义,CacheUsage 不适用于此属性,CheckCacheThenDatabase 对于使用查询缓存的查询没有意义。

    EclipseLink 有两种类型的缓存,“对象缓存”(按 ID)和“查询缓存”(按查询名称和参数)。启用查询缓存后,查询结果将被缓存直到过期。默认情况下没有过期,但你可以配置它,或者手动清除查询缓存。查询缓存不会随数据库更改而更新。

    看, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Query_Cache

    【讨论】:

    • 嗨詹姆斯,谢谢你。所以看来我不能使用查询缓存来获取动态数据,因为它没有随着数据库的变化而更新。那么有没有其他方法可以实现这一点(除了 oracle coherence )。
    • 您可以对查询缓存使用失效超时,结果可能会过期,但不会超过您允许的时间。结果中的对象将在对象缓存中保持最新。在 Oracle EclipseLink 上支持 DCN 来更新对象缓存。对于查询缓存,JpaCache API 允许使查询缓存失效,因此如果您知道数据库何时更改,您可以使查询缓存失效。
    • 你用的是什么数据库?
    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2019-07-05
    • 2014-01-22
    • 2012-11-17
    • 1970-01-01
    相关资源
    最近更新 更多