【问题标题】:How to get Glassfish/EclipseLink/JPA to cache entityManager.find results that return null如何让 Glassfish/EclipseLink/JPA 缓存返回 null 的 entityManager.find 结果
【发布时间】:2013-04-29 14:45:37
【问题描述】:

虽然我遇到了一个问题,即 JPA/EclipseLink 没有在 L2 共享缓存中缓存我的实体对象,因为当我重复请求时,我会得到 SQL 语句命中 Derby。当我调试这个时,我发现缓存毕竟在工作,发生的事情是只有 entityManager.find 对不存在的实体的请求(返回 null)没有被缓存(没有对象可以管理和保存在缓存中)我想象的情况)。这些请求是每次访问数据库的请求。

有没有办法让系统(EclipseLink?)“缓存”先前请求的键不存在的事实,以便它可以在不访问数据库的情况下返回 null?

我使用的是 Glassfish 版本 3.1.2.1。

【问题讨论】:

    标签: jakarta-ee jpa ejb eclipselink glassfish-3


    【解决方案1】:

    不能保证因为某些东西过去不存在,所以它永远不会存在。一个常见的用例是检查某些东西是否存在,如果它不创建它,所以在缓存某些东西不存在时需要小心。

    对象缓存中的EclipseLink中没有这个设置,但是查询缓存中有设置。

    如果您为查找操作定义了命名查询,则可以为其启用查询缓存。默认情况下,查询缓存会缓存一个空结果(这是可配置的)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2015-06-30
      相关资源
      最近更新 更多