2013-05-05 75 views
1

虽然我有一个问题,JPA/EclipseLink没有在L2共享缓存中缓存我的实体对象,因为当我重复请求时,我会获取SQL语句命中德比。当我调试这个时,我发现缓存完全工作,发生的事情是,只有entityManager.find请求不存在的实体(返回null)没有被缓存(没有对象来管理并保存在缓存中我想象的情况)。这些请求是每次都进入数据库的请求。如何让GlassFish/EclipseLink/JPA缓存返回null的entityManager.find结果

有没有办法让系统(EclipseLink?)“缓存”以前请求的键不存在的事实,因此它可以在不敲击数据库的情况下返回null?

我使用的是Glassfish版本3.1.2.1。

回答

1

不能保证,因为某些东西不曾存在,它永远不会存在。一个常见的用例是检查是否存在某个东西,如果它没有创建它,那么您需要小心缓存中不存在的东西。

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

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

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