rus*_*elf 8 java jpa eclipselink java-ee ejb-3.0
我有一组状态,我希望在应用程序的生命周期中缓存,最好是在第一次调用它之后.我正在使用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查询,它每次我的会话Bean使用这个NamedQuery时仍然会做一个选择.
配置此查询的正确方法是什么,以便只从数据库中读取一次,最好是在所有会话中读取?
编辑:我正在调用这样的查询:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();
小智 8
这里发布的解决方案对我不起作用.但我已经使它成功:
@Cache
@NamedQueries({@NamedQuery(
      name = "State.findAll",
      query = "SELECT s FROM State s", 
      hints = {
          @QueryHint(name = QueryHints.QUERY_RESULTS_CACHE, value = HintValues.TRUE)
      }
    )})
这里只是一个猜测,但你可以尝试一下
query.cacheQueryResults();
在你创建它之后但在你之前getResultList。
——马库斯Q
| 归档时间: | 
 | 
| 查看次数: | 6464 次 | 
| 最近记录: |