Use @CacheIndex
to define a cached index. Cache indexes are used only when caching is enabled.
Annotation Elements
Table 2-5 describes this annotation's elements.
Table 2-5 @CacheIndex Annotation Elements
Annotation Element | Description | Default |
---|---|---|
|
(Optional) The set of columns on which to define the index. Not required when annotated on a field/method. |
|
|
(Optional) Specify if the indexed field is updateable. If |
true |
Usage
A cache index allows singleResult
queries to obtain a cache hit when querying on the indexed fields. A resultList
query cannot obtain cache hits, as it is unknown if all of the objects are in memory, (unless the cache usage query hint is used).
The index should be unique. If it is not, the first indexed object will be returned.
You can use @CacheIndex
on an Entity class or on an attribute. The column is defaulted when defined on a attribute.
Examples
Example 2-13 shows an example of using the @CacheIndex
annotation.
Example 2-13 Using @CacheIndex Annotation
@Entity @CacheIndex(columnNames={"F_NAME", "L_NAME"}, updateable=true) public class Employee { @Id private long id; @CacheIndex private String ssn; @Column(name="F_NAME") private String firstName; @Column(name="L_NAME") private String lastName; }
Example 2-14 shows an example of using the <cache-index>
XML element in the eclipselink-orm.xml
file.
Example 2-14 Using <cache-index> XML
<?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"> <cache-index updateable="true"> <column-name>F_NAME</column-name> <column-name>L_NAME</column-name> </cache-index> <attributes> <id name="id"/> <basic name="ssn"> <cache-index/> </basic> <basic name="firstName"> <column name="F_NAME"/> </basic> <basic name="lastName"> <column name="L_NAME"/> </basic> </attributes> </entity> </entity-mappings>
Example 2-15 shows an example query using a cache index.
Example 2-15 Caching an Index Query
Query query = em.createQuery("Select e from Employee e where e.firstName = :firstName and e.lastName = :lastName"); query.setParameter("firstName", "Bob"); query.setParameter("lastName", "Smith"); Employee employee = (Employee)query.getSingleResult();
See Also
For more information, see:
"About Cache Indexes" in Understanding EclipseLink