Annotation Interface Cache
- a named cache region in which to store the state of instances of the entity or collection, and
- an appropriate cache concurrency policy, given the expected data access patterns affecting the entity or collection.
This annotation should always be used in preference to the less
useful JPA-defined annotation Cacheable
,
since JPA provides no means to specify anything about the semantics
of the cache. Alternatively, it's legal, but redundant, for the two
annotations to be used together.
Note that entity subclasses of a root entity with a second-level cache inherit the cache belonging to the root entity.
For example, the following entity is eligible for caching:
@Entity @Cache(usage = NONSTRICT_READ_WRITE) public static class Person { ... }
Similarly, this collection is cached:
@OneToMany(mappedBy = "person") @Cache(usage = NONSTRICT_READ_WRITE) private List<Phone> phones = new ArrayList<>();
Note that the second-level cache is disabled unless "hibernate.cache.region.factory_class" is explicitly specified, and so, by default, this annotation has no effect.
-
Required Element Summary
Required ElementsModifier and TypeRequired ElementDescriptionThe appropriate concurrency policy for the annotated root entity or collection. -
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionboolean
When bytecode enhancement is used, and field-level lazy fetching is enabled, specifies whether lazy attributes of the entity are eligible for inclusion in the second-level cache, in the case where they happen to be loaded.The cache region name.
-
Element Details
-
usage
CacheConcurrencyStrategy usageThe appropriate concurrency policy for the annotated root entity or collection.
-
-
-
region
String regionThe cache region name.- Default:
- ""
-
includeLazy
boolean includeLazyWhen bytecode enhancement is used, and field-level lazy fetching is enabled, specifies whether lazy attributes of the entity are eligible for inclusion in the second-level cache, in the case where they happen to be loaded.By default, a loaded lazy field will be cached when second-level caching is enabled. If this is not desirable—if, for example, the field value is extremely large and only rarely accessed—then setting
@Cache(includeLazy=false)
will prevent it and other lazy fields of the annotated entity from being cached, and the lazy fields will always be retrieved directly from the database.- See Also:
- Default:
- true
-