Annotation Interface LazyGroup


@Target({METHOD,FIELD}) @Retention(RUNTIME) public @interface LazyGroup
Specifies the fetch group for a persistent attribute of an entity class. This annotation has no effect unless bytecode enhancement is used, and field-level lazy fetching is enabled.
  • When bytecode enhancement is not used, declaring a field as @Basic(fetch=LAZY) has no effect on the runtime behavior of Hibernate. All fields of an entity are loaded at the same time, as if they all belonged to the same fetch group.
  • But when bytecode enhancement is used, a field declared @Basic(fetch=LAZY)} is loaded lazily when it is first accessed, using a separate SQL select statement. Since this trip to the database is generally expensive, Hibernate will, by default, load all lazy fields at once. This annotation provides control over that behavior.

A fetch group identifies a set of related attributes that should be loaded together when any one of them is accessed. By default, all non-collection attributes belong to a single fetch group named "DEFAULT". The fetch group for a given lazy attribute may be explicitly specified using the value() member of this annotation.

For example, a field annotated @Basic(fetch=LAZY) @LazyGroup("extra") belongs to the fetch group named "extra", and is loaded whenever an attribute belonging to the "extra" fetch group is accessed.

Note that field-level lazy fetching is usually of dubious value, and most projects using Hibernate don't even bother enabling the bytecode enhancer.

See Also:
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
     
  • Element Details