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.
Difference between revisions of "EclipseLink/UserGuide/JPA/Basic JPA Development/Caching/Cache Annotation"
< EclipseLink | UserGuide | JPA | Basic JPA Development | Caching
m |
|||
Line 1: | Line 1: | ||
+ | {{EclipseLink_UserGuide|info=y | ||
+ | |api=y | ||
+ | |apis= | ||
+ | *[http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/annotations/Cache.html @Cache] | ||
+ | |examples=y | ||
+ | |example= | ||
+ | *[[EclipseLink/Examples/JPA/Caching|Caching]] | ||
+ | }} | ||
==@Cache Annotation== | ==@Cache Annotation== | ||
Line 8: | Line 16: | ||
If you define the <tt>@Cache</tt> annotation on an inheritance subclass, the annotation will be ignored. If you define the <tt>@Cache</tt> annotation on <tt>@Embeddable</tt> EclipseLink will throw an exception. | If you define the <tt>@Cache</tt> annotation on an inheritance subclass, the annotation will be ignored. If you define the <tt>@Cache</tt> annotation on <tt>@Embeddable</tt> EclipseLink will throw an exception. | ||
− | + | {{EclipseLink_AttributeTable | |
− | + | |caption=@Cache Annotation Attributes | |
− | + | |content= | |
− | | | + | <tr> |
− | + | <td><tt>type</tt></td> | |
− | + | <td>Set this attribute to the type (<tt>org.eclipse.persistence.annotations.CacheType</tt> enumerated type) of the cache that you will be using: | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | <tt>type</tt> | + | |
− | + | ||
− | Set this attribute to the type (<tt>org.eclipse.persistence.annotations.CacheType</tt> enumerated type) of the cache that you will be using: | + | |
*FULL | *FULL | ||
*WEAK | *WEAK | ||
Line 29: | Line 29: | ||
*CACHE (not recommended) | *CACHE (not recommended) | ||
*NONE (not recommended, use shared=false instead) | *NONE (not recommended, use shared=false instead) | ||
− | + | ||
− | + | You can override this attribute with these persistence unit properties: | |
− | + | ||
− | + | ||
− | + | ||
* <tt>eclipselink.cache.type.<ENTITY></tt> | * <tt>eclipselink.cache.type.<ENTITY></tt> | ||
* <tt>eclipselink.cache.type.default</tt> | * <tt>eclipselink.cache.type.default</tt> | ||
− | + | </td> | |
− | + | <td><tt>CacheType.SOFT_WEAK</tt></td> | |
− | <tt>size</tt> | + | <td>Optional</td> |
− | + | </tr> | |
− | Set this attribute to an <tt>int</tt> value to define the size of cache to use (number of objects) | + | <tr> |
− | + | <td><tt>size</tt></td> | |
− | 100 | + | <td>Set this attribute to an <tt>int</tt> value to define the size of cache to use (number of objects)</td> |
− | + | <td>100</td> | |
− | + | <td></td> | |
− | + | </tr> | |
− | + | <tr> | |
− | <tt>shared</tt> | + | <td><tt>shared</tt></td> |
− | + | <td>Indicate whether cached instances should be in the shared cache or in a client isolated cache (see [[Using%20Advanced%20Unit%20of%20Work%20API%20(ELUG)#Isolated Client Session Cache|Isolated Client Session Cache]]). This allows the shared cache (L2 cache) to be disabled. | |
− | Indicate whether cached instances should be in the shared cache or in a client isolated cache (see [[Using%20Advanced%20Unit%20of%20Work%20API%20(ELUG)#Isolated Client Session Cache|Isolated Client Session Cache]]). | + | |
− | This allows the shared cache (L2 cache) to be disabled. | + | |
* <tt>true</tt> - use shared cache for cached instances; | * <tt>true</tt> - use shared cache for cached instances; | ||
− | * <tt>false</tt> - use client isolated cache for cached instances (no L2 cache). | + | * <tt>false</tt> - use client isolated cache for cached instances (no L2 cache).</td> |
− | + | <td><tt>true</tt></td> | |
− | <tt>true</tt> | + | <td>Optional</td> |
− | + | </tr> | |
− | + | <tr> | |
− | + | <td><tt>expiry</tt></td> | |
− | + | <td>The <tt>int</tt> value to enable the expiration of the cached instance after a fixed period of time (milliseconds). Queries executed against the cache after this will be forced back to the database for a refreshed copy.</td> | |
− | + | <td>-1 (no expiry)</td> | |
− | <tt>expiry</tt> | + | <td>Optional</td> |
− | + | </tr> | |
− | The <tt>int</tt> value to enable the expiration of the cached instance after a fixed period of time (milliseconds). Queries executed against the cache after this will be forced back to the database for a refreshed copy. | + | <tr> |
− | + | <td><tt>expiryTimeOfDay</tt></td> | |
− | -1 (no expiry) | + | <td>Specific time of day (<tt>org.eclipse.persistence.annotations.TimeOfDay</tt>) when the cached instance will expire. Queries executed against the cache after this will be forced back to the database for a refreshed copy.</td> |
− | + | <td> | |
− | + | <tt>@TimeOfDay(specified=false)</tt></td> | |
− | + | <td>Optional</td> | |
− | + | </tr> | |
− | + | <tr> | |
− | <tt>expiryTimeOfDay</tt> | + | <td><tt>alwaysRefresh</tt></td> |
− | + | <td>Set to a <tt>boolean</tt> value of <tt>true</tt> to force all queries that go to the database to always refresh the cache.</td> | |
− | Specific time of day (<tt>org.eclipse.persistence.annotations.TimeOfDay</tt>) when the cached instance will expire. Queries executed against the cache after this will be forced back to the database for a refreshed copy. | + | <td><tt>false</tt></td> |
− | + | <td>Optional</td> | |
− | <tt>@TimeOfDay(specified=false)</tt> | + | </tr> |
− | + | <tr> | |
− | + | <td><tt>refreshOnlyIfNewer</tt></td> | |
− | + | <td>Set to a <tt>boolean</tt> value of <tt>true</tt> to force all queries that go to the database to refresh the cache only if the data received from the database by a query is newer than the data in the cache (as determined by the optimistic locking field). | |
− | + | ||
− | + | ||
− | <tt>alwaysRefresh</tt> | + | |
− | + | ||
− | Set to a <tt>boolean</tt> value of <tt>true</tt> to force all queries that go to the database to always refresh the cache. | + | |
− | + | ||
− | <tt>false</tt> | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | <tt>refreshOnlyIfNewer</tt> | + | |
− | + | ||
− | Set to a <tt>boolean</tt> value of <tt>true</tt> to force all queries that go to the database to refresh the cache only if the data received from the database by a query is newer than the data in the cache (as determined by the optimistic locking field). | + | |
Note: This option only applies if one of the other refreshing options, such as <tt>alwaysRefresh</tt>, is already enabled. | Note: This option only applies if one of the other refreshing options, such as <tt>alwaysRefresh</tt>, is already enabled. | ||
− | Note: A version field is necessary to apply this feature. | + | Note: A version field is necessary to apply this feature.</td> |
− | + | <td><tt>false</tt></td> | |
− | <tt>false</tt> | + | <td>Optional</td> |
− | + | </tr><tr> | |
− | + | <td><tt>disableHits</tt></td> | |
− | + | <td>Set to a <tt>boolean</tt> value of <tt>true</tt> to force all queries to bypass the cache for hits, but still resolve against the cache for identity. This forces all queries to hit the database. | |
− | + | </td> | |
− | + | <td><tt>false</tt></td> | |
− | <tt>disableHits</tt> | + | <td>Optional</td> |
− | + | </tr><tr> | |
− | Set to a <tt>boolean</tt> value of <tt>true</tt> to force all queries to bypass the cache for hits, but still resolve against the cache for identity. This forces all queries to hit the database. | + | <td><tt>coordinationType</tt></td> |
− | + | <td>Set this attribute to the cache coordination mode (<tt>org.eclipse.persistence.annotations.CacheCoordinationType</tt> enumerated type).</td> | |
− | <tt>false</tt> | + | <td><tt>CacheCoordinationType.SEND_OBJECT_CHANGES</tt></td> |
− | + | <td>Optional</td> | |
− | + | </tr> | |
− | + | }} | |
− | + | ||
− | + | ||
− | <tt>coordinationType</tt> | + | |
− | + | ||
− | Set this attribute to the cache coordination mode (<tt>org.eclipse.persistence.annotations.CacheCoordinationType</tt> enumerated type). | + | |
− | + | ||
− | <tt>CacheCoordinationType.SEND_OBJECT_CHANGES</tt> | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | '' | + | ======''@Cache Annotation Example''==== |
<span id="Example_of_@Cache Annotation"></span> | <span id="Example_of_@Cache Annotation"></span> | ||
<source lang="java"> | <source lang="java"> |
Revision as of 12:29, 31 March 2011
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Examples
@Cache Annotation
You can define the @Cache annotation on the following:
- @Entity
- @MappedSuperclass
- the root of the inheritance hierarchy (if applicable)
If you define the @Cache annotation on an inheritance subclass, the annotation will be ignored. If you define the @Cache annotation on @Embeddable EclipseLink will throw an exception.
Attribute | Description | Default | Required? |
---|---|---|---|
type | Set this attribute to the type (org.eclipse.persistence.annotations.CacheType enumerated type) of the cache that you will be using:
You can override this attribute with these persistence unit properties:
|
CacheType.SOFT_WEAK | Optional |
size | Set this attribute to an int value to define the size of cache to use (number of objects) | 100 | |
shared | Indicate whether cached instances should be in the shared cache or in a client isolated cache (see Isolated Client Session Cache). This allows the shared cache (L2 cache) to be disabled.
|
true | Optional |
expiry | The int value to enable the expiration of the cached instance after a fixed period of time (milliseconds). Queries executed against the cache after this will be forced back to the database for a refreshed copy. | -1 (no expiry) | Optional |
expiryTimeOfDay | Specific time of day (org.eclipse.persistence.annotations.TimeOfDay) when the cached instance will expire. Queries executed against the cache after this will be forced back to the database for a refreshed copy. | @TimeOfDay(specified=false) | Optional |
alwaysRefresh | Set to a boolean value of true to force all queries that go to the database to always refresh the cache. | false | Optional |
refreshOnlyIfNewer | Set to a boolean value of true to force all queries that go to the database to refresh the cache only if the data received from the database by a query is newer than the data in the cache (as determined by the optimistic locking field).
Note: This option only applies if one of the other refreshing options, such as alwaysRefresh, is already enabled. Note: A version field is necessary to apply this feature. |
false | Optional |
disableHits | Set to a boolean value of true to force all queries to bypass the cache for hits, but still resolve against the cache for identity. This forces all queries to hit the database. | false | Optional |
coordinationType | Set this attribute to the cache coordination mode (org.eclipse.persistence.annotations.CacheCoordinationType enumerated type). | CacheCoordinationType.SEND_OBJECT_CHANGES | Optional |
==@Cache Annotation Example
... @Entity @Cache( type=CacheType.SOFT, // Cache everything until the JVM decides memory is low. size=64000 // Use 64,000 as the initial cache size. expiry=36000000, // 10 minutes coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS // if cache coordination is used, only send invalidation messages. ) public class Employee { ... }