我正在使用 EclipseLink 2.5.0 我正在尝试实现以下目标。
- 使用非键过滤器查询对象。
- 如果结果不为空,则应将其缓存,并且将来具有相同过滤器值的查询不应进入数据库。
- 如果未找到结果,则不应缓存结果,并且将来具有相同过滤器值的查询应转到数据库。
我认为,我应该能够通过eclipselink.query-results-cache.ignore-null
提示来实现它,但是如果我包括以下内容
<hint name="eclipselink.query-results-cache.ignore-null" value="true"/>
没有结果被缓存。如果我包括以下
<hint name="eclipselink.query-results-cache" value="true"/>
甚至“无”(未找到记录)也被缓存。我的完整命名查询如下所示
<named-query name="find.Employee.findEmployeeByPlace">
<description>
Find employee by place.
</description>
<query><![CDATA[
select e
from Employee e
where e.place = :place
]]></query>
<!--<hint name="eclipselink.query-results-cache" value="true"/>-->
<hint name="eclipselink.query-results-cache.ignore-null" value="true"/>
</named-query>
我的发现似乎与如何让 Glassfish/EclipseLink/JPA 缓存返回 null 的 entityManager.find 结果相反