Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/UserGuide/JPA/Basic JPA Development/Caching/Query Cache
EclipseLink JPA
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Native API
Contents
Query Results Cache
The EclipseLink query results cache allows the results of named queries to be cached, similar to how objects are cached.
By default in EclipseLink all queries access the database, unless they are by Id, or by cache indexed fields. The resulting rows will still be resolved with the cache, and further queries for relationship will be avoided if the object is cached, but the original query will always access the database. EclipseLink does have options for querying the cache, but these options cannot be used by default, as EclipseLink can not assume that all of the objects in the database are in the cache. The query results cache allows for non-indexed and result list queries to still benefit from caching.
The query results cache are indexed by the name of the query, and the parameters of the query. Only named queries can have their results cached, dynamic queries cannot use the query results cache. As well, if you modify a named query before execution, such as setting hints or properties, then it cannot use the cache results.
The query results cache does not pick up transactional changes from the application as the object cache does. It should only be used to cache read-only objects, or should use an invalidation policy to avoid caching stale results. Changes to the objects in the result set will still be picked up, by changes that affect the results set (such as new or changed objects that should be added/removed from the result set) will not be picked up.
The query results cache is configured through query hints.
Query results cache annotation example
... @Entity @NamedQuery( name="findAllEmployeesInCity", query="Select e from Employee e where e.address.city = :city", hints={ @Hint(name="", value="") }) public class Employee { ... }
Query results cache XML example
<?xml version="1.0"?> <entity-mappings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd" version="2.4"> <entity name="Employee" class="org.acme.Employee" access="FIELD"> <named-query name="findAllEmployeesInCity"> <hint name="" value=""/> </named-query> ... </entity> </entity-mappings>
Query results cache query example
Query query = em.createNamedQuery("findAllEmployeesInCity"); query.setParameter("city", "Ottawa"); List<Employee> employees = query.getResultList();