【发布时间】:2010-10-09 17:49:52
【问题描述】:
我有一组状态,我想在应用程序的整个生命周期中缓存它们,最好是在它第一次调用之后。我使用 EclipseLink 作为我的持久性提供程序。在我的 EJB3 实体中,我有以下代码:
@Cache
@NamedQueries({
@NamedQuery(
name = "State.findAll",
query = "SELECT s FROM State s",
hints = {
@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
@QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE)
}
)
})
这似乎并没有做任何事情,如果我监控到 MySQL 的 SQL 查询,它仍然会在每次我的 Session Bean 使用这个 NamedQuery 时进行选择。
配置此查询的正确方法是什么,以便它只从数据库中读取一次,最好是在所有会话中读取?
编辑:我这样调用查询:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();
【问题讨论】:
-
祝你好运,搞清楚 EclipseLink 的会话/缓存配置。我从来没有。
-
QueryHints.CACHE_USAGE和CacheUsage.CheckCacheThenDatabase导致我的列表查询只返回一个条目。与@André Luiz Cardoso 的回答一起正常工作。
标签: java jpa jakarta-ee ejb-3.0 eclipselink