Package org.hibernate.sql.results.graph
Interface Initializer<Data extends InitializerData>
- All Known Subinterfaces:
CollectionInitializer<Data>
,EmbeddableInitializer<Data>
,EntityInitializer<Data>
,InitializerParent<Data>
- All Known Implementing Classes:
AbstractBatchEntitySelectFetchInitializer
,AbstractCollectionInitializer
,AbstractImmediateCollectionInitializer
,AbstractInitializer
,AbstractNonJoinCollectionInitializer
,AggregateEmbeddableInitializerImpl
,ArrayInitializer
,BagInitializer
,BatchEntityInsideEmbeddableSelectFetchInitializer
,BatchEntitySelectFetchInitializer
,BatchInitializeEntitySelectFetchInitializer
,DelayedCollectionInitializer
,DiscriminatedEntityInitializer
,EmbeddableInitializerImpl
,EntityDelayedFetchInitializer
,EntityInitializerImpl
,EntitySelectFetchByUniqueKeyInitializer
,EntitySelectFetchInitializer
,ListInitializer
,MapInitializer
,NonAggregatedIdentifierMappingInitializer
,SelectEagerCollectionInitializer
,SetInitializer
Defines a multi-step process for initializing entity, collection and
composite state. Each step is performed on each initializer
before starting the next step.
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptiondefault @Nullable CollectionInitializer<?>
A utility method to avoid casting explicitly to CollectionInitializerdefault @Nullable EmbeddableInitializer<?>
A utility method to avoid casting explicitly to EmbeddableInitializerdefault @Nullable EntityInitializer<?>
A utility method to avoid casting explicitly to EntityInitializerdefault void
endLoading
(Data data) Lifecycle method called at the very end of the result values processingdefault void
endLoading
(RowProcessingState rowProcessingState) default @Nullable EntityInitializer<?>
Find the entity initializer that owns this initializer by traversing upgetParent()
.static @Nullable EntityInitializer<?>
findOwningEntityInitializer
(@Nullable Initializer<?> parent) Find the entity initializer that owns this initializer by traversing upgetParent()
.void
finishUpRow
(Data data) Lifecycle method called at the end of the current row processing.default void
finishUpRow
(RowProcessingState rowProcessingState) getData
(RowProcessingState rowProcessingState) The current data of this initializer.default @Nullable InitializerParent<?>
Returns the parentInitializer
ornull
if this is a result initializer.default Object
getResolvedInstance
(Data data) default Object
getResolvedInstance
(RowProcessingState rowProcessingState) boolean
Indicates whether this initializer has sub-initializers which are lazy.void
initializeInstance
(Data data) Step 3 - Initialize the state of the instance resolved inresolveInstance(Data)
from the current row values.default void
initializeInstance
(RowProcessingState rowProcessingState) default void
initializeInstanceFromParent
(Object parentInstance, Data data) Step 3.1 - Initialize the state of the instance as extracted from the given parentInstance.default void
initializeInstanceFromParent
(Object parentInstance, RowProcessingState rowProcessingState) default boolean
boolean
isEager()
Indicates whether calling resolve is needed when the object for this initializer is initialized already.default boolean
default boolean
default boolean
Indicates whether this initializer or one of its sub-parts could be made lazy.boolean
Indicates whether this initializer is part of a key i.e.static boolean
isPartOfKey
(NavigablePath navigablePath, InitializerParent<?> parent) boolean
Indicates if this is a result or fetch initializer.default void
resolveFromPreviousRow
(Data data) Step 1.2 - Special variant ofresolveKey(InitializerData)
that allows the reuse of key value and instance value from the previous row.default void
resolveFromPreviousRow
(RowProcessingState rowProcessingState) default void
resolveInstance
(@Nullable Object instance, Data data) Step 2.2 - Use the given instance as resolved instance for this initializer.default void
resolveInstance
(@Nullable Object instance, RowProcessingState rowProcessingState) void
resolveInstance
(Data data) Step 2.1 - Using the key resolved inresolveKey(Data)
, resolve the instance (of the thing initialized) to use for the current row.default void
resolveInstance
(RowProcessingState rowProcessingState) void
resolveKey
(Data data) Step 1.1 - Resolve the key value for this initializer for the current row and then recurse to the sub-initializers.default void
resolveKey
(RowProcessingState rowProcessingState) void
resolveState
(Data data) default void
resolveState
(RowProcessingState rowProcessingState) void
startLoading
(RowProcessingState rowProcessingState) Step 0 - Callback for initializers before the first row is read.
-
Field Details
-
EMPTY_ARRAY
-
-
Method Details
-
getParent
Returns the parentInitializer
ornull
if this is a result initializer. -
findOwningEntityInitializer
Find the entity initializer that owns this initializer by traversing upgetParent()
. -
findOwningEntityInitializer
Find the entity initializer that owns this initializer by traversing upgetParent()
. -
getInitializedPart
ModelPart getInitializedPart() -
getResolvedInstance
-
getResolvedInstance
-
getData
The current data of this initializer. -
startLoading
Step 0 - Callback for initializers before the first row is read. It is the responsibility of this initializer to recurse to the sub-initializers and registerInitializerData
for the initializer id viaRowProcessingState.setInitializerData(int, InitializerData)
. This is useful for e.g. preparing initializers in case of a cache hit. -
resolveKey
Step 1.1 - Resolve the key value for this initializer for the current row and then recurse to the sub-initializers. After this point, the initializer knows whether further processing is necessary for the current row i.e. if the object is missing. -
resolveKey
-
resolveFromPreviousRow
Step 1.2 - Special variant ofresolveKey(InitializerData)
that allows the reuse of key value and instance value from the previous row.- Implementation Specification:
- Defaults to simply delegating to
resolveKey(InitializerData)
.
-
resolveFromPreviousRow
-
resolveInstance
Step 2.1 - Using the key resolved inresolveKey(Data)
, resolve the instance (of the thing initialized) to use for the current row. After this point, the initializer knows the entity/collection/component instance for the current row based on the resolved key. If the resolving was successful,getResolvedInstance(RowProcessingState)
will return that instance. -
resolveInstance
-
resolveState
-
resolveState
-
resolveInstance
Step 2.2 - Use the given instance as resolved instance for this initializer. Initializers are supposed to recursively call this method for sub-initializers. This alternative initialization protocol is used when a parent instance was already part of the persistence context. -
resolveInstance
-
initializeInstance
Step 3 - Initialize the state of the instance resolved inresolveInstance(Data)
from the current row values. All resolved state for the current row is injected into the resolved instance -
initializeInstance
-
initializeInstanceFromParent
Step 3.1 - Initialize the state of the instance as extracted from the given parentInstance. Extraction can be done with thegetInitializedPart()
. Initializers are supposed to recursively call this method for sub-initializers. This alternative initialization protocol is used for shallow query cache hits, in which case there is no data available in theJdbcValuesCacheHit
to initialize potentially lazy associations. -
initializeInstanceFromParent
default void initializeInstanceFromParent(Object parentInstance, RowProcessingState rowProcessingState) -
finishUpRow
Lifecycle method called at the end of the current row processing. Provides ability to complete processing from the current row and prepare for the next row. -
finishUpRow
-
endLoading
Lifecycle method called at the very end of the result values processing -
endLoading
-
isPartOfKey
boolean isPartOfKey()Indicates whether this initializer is part of a key i.e. entity identifier, foreign key or collection key. -
isEager
boolean isEager()Indicates whether calling resolve is needed when the object for this initializer is initialized already. -
isLazyCapable
default boolean isLazyCapable()Indicates whether this initializer or one of its sub-parts could be made lazy. -
hasLazySubInitializers
boolean hasLazySubInitializers()Indicates whether this initializer has sub-initializers which are lazy. -
isResultInitializer
boolean isResultInitializer()Indicates if this is a result or fetch initializer. -
isEmbeddableInitializer
default boolean isEmbeddableInitializer() -
isEntityInitializer
default boolean isEntityInitializer() -
isCollectionInitializer
default boolean isCollectionInitializer() -
asEntityInitializer
A utility method to avoid casting explicitly to EntityInitializer- Returns:
- EntityInitializer if this is an instance of EntityInitializer otherwise
null
-
asEmbeddableInitializer
A utility method to avoid casting explicitly to EmbeddableInitializer- Returns:
- EmbeddableInitializer if this is an instance of EmbeddableInitializer otherwise
null
-
asCollectionInitializer
A utility method to avoid casting explicitly to CollectionInitializer- Returns:
- CollectionInitializer if this is an instance of CollectionInitializer otherwise
null
-