gpt4 book ai didi

java - 为什么 EclipseLink 查询缓存仅在我使用 query.getSingleResult() 时才起作用?

转载 作者:行者123 更新时间:2023-11-30 05:16:57 25 4
gpt4 key购买 nike

我的实体有一个命名查询,如下所示:

@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 不支持 native 查询或具有复杂结果集(例如返回数据或多个对象)的查询的缓存使用。”

文档还说:

“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)
}
})

关于java - 为什么 EclipseLink 查询缓存仅在我使用 query.getSingleResult() 时才起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com