name, together
with a list of fetch strategy overrides.
The definition of a single named fetch profile may be split over
multiple @FetchProfile annotations which share
the same name.
Additional fetch strategy overrides may be added to a named fetch
profile by annotating the fetched associations themselves with the
@FetchProfileOverride annotation,
specifying the name of the
fetch profile.
A named fetch profile must be explicitly enabled in a given session
by calling org.
for it to have any effect at runtime.
Fetch profiles compete with JPA-defined
named entity graphs,
and so programs which wish to maintain compatibility with alternative
implementations of JPA should prefer @NamedEntityGraph. The
semantics of these two facilities are not quite identical, however,
since a fetch profile is a list, not a graph.
Or, if we insist on thinking in terms of graphs:
FetchOverride in the fetch profile applies the
same fetching strategy to the overridden association wherever it
is reached recursively within the graph, whereas
However, a fetch profile is not by nature rooted at any one particular
entity, and so @FetchProfile is not required to annotate the
entity classes it affects. It may even occur as a package-level
annotation.
Instead, the root entity of a fetch graph is determined by the context
in which the fetch profile is active. For example, if a fetch profile
is active when org. is
called, then the root entity is the entity with the given Class.
Given a root entity as input, an active fetch profile contributes to
the determination of the fetch graph.
A JPA jakarta. may be constructed in
Java code at runtime. But this amounts to a separate, albeit extremely
limited, query facility that competes with JPA's own criteria queries.
There's no such capability for fetch profiles.
FetchProfileOverride, org.hibernate.Session#enableFetchProfile(String) , org.hibernate.SessionFactory#containsFetchProfileDefinition(String)
| Modifier and Type | Class and Description |
|---|---|
| public static @interface | FetchProfile.FetchOverride
Overrides the fetching strategy for a particular association in the named fetch profile being defined. |
| Modifier and Type | Method and Description |
|---|---|
| public FetchProfile. | |
| public String |
| fetchOverrides | back to summary |
|---|---|
| public FetchProfile. The list of association fetching strategy overrides.
Additional overrides may be specified by marking the
fetched associations themselves with the | |
| name | back to summary |
|---|---|
| public String name() The name of the fetch profile. Must be unique within a persistence unit. | |
mode and fetch are both unspecified,
the strategy defaults to eager
join fetching.
Additional fetch strategy overrides may be specified using the
@FetchProfileOverride annotation.
FetchProfileOverride
| Modifier and Type | Method and Description |
|---|---|
| public String | |
| public Class | |
| public FetchType | |
| public FetchMode |
| association | back to summary |
|---|---|
| public String association() The association whose default fetch strategy is being overridden. | |
| entity | back to summary |
|---|---|
| public Class The entity containing the association whose default fetch strategy is being overridden. | |
| fetch | back to summary |
|---|---|
| public FetchType fetch() The | |
| mode | back to summary |
|---|---|
| public FetchMode mode() The method used for fetching the association in the fetch profile being defined. | |