1

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

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

我正在使用 Glassfish 版本 3.1.2.1。

4

1 回答 1

1

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

在对象缓存中的 EclipseLink 中没有对此进行设置,但在查询缓存中有设置。

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

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

于 2013-05-06T15:28:51.437 回答