【问题标题】:eclipselink query-results-cache does not workeclipselink 查询结果缓存不起作用
【发布时间】:2016-10-26 12:30:57
【问题描述】:

我有一个带有命名查询的实体。

@Entity(name = "MyEntity")
@Table(name = "mytable") 
//@ReadOnly
@NamedQueries({
@NamedQuery(
        name = "exampleFind", 
        query = "[..]", 
hints = {@QueryHint(name= QueryHints.QUERY_RESULTS_CACHE, value= "TRUE")})
})
@Cacheable
@Cache(type = CacheType.FULL)
public class MyEntity {

当我使用 @ReadOnly 注释此类时,此查询不会命中数据库(仅使用结果缓存),但是当我删除 @ReadOnly 注释时,它总是在数据库上执行 SQL。

如何在没有@ReadOnly 的情况下启用此缓存?结果缓存有什么限制吗?

我使用 EclipseLink 2.4.1

【问题讨论】:

    标签: jpa caching eclipselink


    【解决方案1】:

    在我们的应用程序中,我们在让查询缓存也能正常工作时遇到了一些麻烦。您需要确保您的实体和查询结果已被缓存。

    对我们来说,当我们将 persistence.xml 中的共享缓存模式设置为 DISABLE_SELECTIVE 时,它会起作用:

     <shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
    

    与此一起,我们使用@Cache 来配置我们想要的实体缓存类型。和@Cacheable(false) 禁用它。

    根据developers manual,此设置实际上是默认设置,因此删除当前设置也应该有效。

    【讨论】:

    • 谢谢。不幸的是,它没有帮助。是否有任何选项可以在 eclipselink 中记录/监视缓存以检查缓存是否启用或何时刷新?也许这个缓存每次都失效,这就是为什么总是有SQL查询到数据库的原因
    • 如果单个对象缓存在共享缓存中,您可以请求它们。 .这可以使用 IdentityMapAccessor 来完成:wiki.eclipse.org/EclipseLink/Examples/JPA/Caching。还有更多的性能测量,但我还没有尝试过。此外,您可以将 eclipselink 的日志记录设置为您的 persistence.xml 中的最佳细节
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多