当我使用query.getSingleResult()为什么EclipseLink的查询缓存仅适用?

StackOverflow https://stackoverflow.com/questions/672754

  •  21-08-2019
  •  | 
  •  

我的实体有一个名为查询,看起来像这样:

@NamedQuery(name = "Person.find", query = "select p from Organization p where p.name=:NAME")

在我的代码我想设置查询缓存提示:

query.setHint("eclipselink.cache-usage", "CheckCacheThenDatabase");

如果我试图让整个结果列表:

List<Person> result = query.getResultList();

的EclipseLink抛出异常:

Exception [EclipseLink-6124] (Eclipse Persistence Services - 1.0.1 (Build 20080905)): org.eclipse.persistence.exceptions.QueryException
Exception Description: Required query of class org.eclipse.persistence.queries.ReadAllQuery, found class org.eclipse.persistence.queries.ReadObjectQuery

如果我尝试只得到一个结果,它的工作原理:

Person person = query.getSingleResult();

如果我删除查询提示,然后getResultList()的工作也

我不理解例外 - 是不是说这是特别期待getResultList()?我在做什么错了?

有帮助吗?

解决方案

的EclipseLink文档说:

“的EclipseLink不支持具有复杂的结果集诸如返回数据或多个对象的原生查询或查询的高速缓存使用。”

另外的文件说:

“CheckCacheThenDatabase - 你可以配置任何读取对象的查询来检查你诉诸访问数据库之前完全缓存”

所以行为似乎是确定的,我刚刚发现异常误导。

编辑:尝试这样的事情在实体定义,这应该是足够的:(编码的网页上,以便可以有错误)

Entity
@Cache(expiry = 3600000, // 1 hour size = 10000)
@NamedQueries({
  @NamedQuery(name = "Person.findByPK", query = "select p from Person p " +
  "where p.name=:NAME",
  hints = {
    @QueryHint(name = QueryHints.CACHE_USAGE,
    value = CacheUsage.CheckCacheThenDatabase),
    @QueryHint(name = QueryHints.QUERY_TYPE, value = QueryType.ReadObject)
  }
})
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top