Top Description Fields Constructors Methods
org.hibernate.annotations

public final Enum FetchMode

extends Enum<FetchMode>
Class Inheritance

Enumerates methods for fetching an association from the database.

The JPA-defined jakarta.persistence.FetchType enumerates the possibilities for when an association might be fetched. This annotation defines how it is fetched in terms of the actual SQL executed by the database.

Authors
Steve Ebersole, Emmanuel Bernard
See Also
Fetch, FetchProfile.FetchOverride#mode()

Field Summary

Modifier and TypeField and Description
public static final FetchMode
JOIN

Use an outer join to load all instances of the related entity or collection at once, as part of the execution of a query.

public static final FetchMode
SELECT

Use a secondary select to load a single associated entity or collection, at some point after an initial query is executed.

public static final FetchMode
SUBSELECT

Use a secondary select with a subselect that re-executes an initial query to load all instances of the related entity or collection at once, at some point after the initial query is executed.

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public FetchMode
public static FetchMode
public static FetchMode[]
Inherited from java.lang.Enum:
clonecompareTodescribeConstableequalsfinalizegetDeclaringClasshashCodenameordinaltoStringvalueOf

Field Detail

JOINback to summary
public static final FetchMode JOIN

Use an outer join to load all instances of the related entity or collection at once, as part of the execution of a query. No subsequent queries are executed.

This is the default fetching strategy for an association or collection that is explicitly marked for eager fetching.

This fetching strategy is incompatible with lazy fetching since the associated data is retrieved as part of the initial query.

SELECTback to summary
public static final FetchMode SELECT

Use a secondary select to load a single associated entity or collection, at some point after an initial query is executed.

This is the default fetching strategy for any association or collection in Hibernate, unless the association or collection is explicitly marked for eager fetching.

This fetching strategy is vulnerable to the "N+1 selects" bugbear, though the impact may be alleviated somewhat via:

  • enabling batch fetching using BatchSize, or
  • ensuring that the associated entity or collection may be retrieved from the second-level cache.

This fetching strategy is, in principle, compatible with both eager and lazy fetching. On the other hand, performance considerations dictate that it should only be used in combination wih EAGER fetching when it is almost certain that the associated data will be available in the second-level cache.

SUBSELECTback to summary
public static final FetchMode SUBSELECT

Use a secondary select with a subselect that re-executes an initial query to load all instances of the related entity or collection at once, at some point after the initial query is executed. This fetching strategy is currently only available for collections and many-valued associations.

This advanced fetching strategy is compatible with both eager and lazy fetching.

Subselect fetching may be contrasted with batch fetching:

  • In batch fetching, a list of primary key values is sent to the database, bound within a SQL in condition.
  • In subselect fetching, the primary keys are determined by re-execution of the initial query within a SQL subselect.

Constructor Detail

FetchModeback to summary
private FetchMode()

Method Detail

getHibernateFetchModeback to summary
public FetchMode getHibernateFetchMode()
valueOfback to summary
public static FetchMode valueOf(String name)
valuesback to summary
public static FetchMode[] values()