Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/Examples/JPA/Caching
In progress
Contents
How to use EclispeLink Caching
EclipseLink offers the following caching strategies to maintain identity:
Option (Identity Map) | Caching | Guaranteed Identity | Memory Use |
---|---|---|---|
Full Identity Map |
Yes |
Yes |
Very High |
Weak Identity Map |
Yes |
Yes |
Low |
Soft Identity Map |
Yes |
Yes |
High |
Soft Cache Weak Identity Map |
Yes |
Yes |
Medium-high |
No Identity Map |
No |
No |
None |
See the documentation for details on these types.
Using the @Cache Annonation
You may 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.
Example of @Cache Annoatation
@Target({TYPE}) @Retention(RUNTIME) public @interface Cache { CacheType type() default SOFT_WEAK; int size() default 100; boolean shared() default true; int expiry() default -1; TimeOfDay expiryTimeOfDay() default @TimeOfDay(specified=false); boolean alwaysRefresh() default false; boolean refreshOnlyIfNewer() default false; boolean disableHits() default false; CacheCoordinationType coordinationType() default SEND_OBJECT_CHANGES; }
Attributes of the @Cache Annotation
Attribute | Description | Default | Required or Optional | Override with Persistence Unit Property |
---|---|---|---|---|
type |
Set this attribute to the type (org.eclipse.persistence.annotations.CacheType enumerated type) of the cache that you will be using:
|
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).
|
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 |
|