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
@Incubating public interface Initializer<Data extends InitializerData>
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 Modifier and Type Interface Description static class
Initializer.State
-
Field Summary
Fields Modifier and Type Field Description static Initializer<?>[]
EMPTY_ARRAY
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default @Nullable CollectionInitializer<?>
asCollectionInitializer()
A utility method to avoid casting explicitly to CollectionInitializerdefault @Nullable EmbeddableInitializer<?>
asEmbeddableInitializer()
A utility method to avoid casting explicitly to EmbeddableInitializerdefault @Nullable EntityInitializer<?>
asEntityInitializer()
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<?>
findOwningEntityInitializer()
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)
Data
getData(RowProcessingState rowProcessingState)
The current data of this initializer.ModelPart
getInitializedPart()
NavigablePath
getNavigablePath()
default @Nullable InitializerParent<?>
getParent()
Returns the parentInitializer
ornull
if this is a result initializer.default Object
getResolvedInstance(Data data)
default Object
getResolvedInstance(RowProcessingState rowProcessingState)
boolean
hasLazySubInitializers()
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
isCollectionInitializer()
boolean
isEager()
Indicates whether calling resolve is needed when the object for this initializer is initialized already.default boolean
isEmbeddableInitializer()
default boolean
isEntityInitializer()
default boolean
isLazyCapable()
Indicates whether this initializer or one of its sub-parts could be made lazy.boolean
isPartOfKey()
Indicates whether this initializer is part of a key i.e.static boolean
isPartOfKey(NavigablePath navigablePath, InitializerParent<?> parent)
boolean
isResultInitializer()
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 Detail
-
EMPTY_ARRAY
static final Initializer<?>[] EMPTY_ARRAY
-
-
Method Detail
-
getParent
default @Nullable InitializerParent<?> getParent()
Returns the parentInitializer
ornull
if this is a result initializer.
-
findOwningEntityInitializer
default @Nullable EntityInitializer<?> findOwningEntityInitializer()
Find the entity initializer that owns this initializer by traversing upgetParent()
.
-
findOwningEntityInitializer
static @Nullable EntityInitializer<?> findOwningEntityInitializer(@Nullable Initializer<?> parent)
Find the entity initializer that owns this initializer by traversing upgetParent()
.
-
getNavigablePath
NavigablePath getNavigablePath()
-
getInitializedPart
ModelPart getInitializedPart()
-
getResolvedInstance
default Object getResolvedInstance(RowProcessingState rowProcessingState)
-
getData
Data getData(RowProcessingState rowProcessingState)
The current data of this initializer.
-
startLoading
void startLoading(RowProcessingState rowProcessingState)
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
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. After this point, the initializer knows whether further processing is necessary for the current row i.e. if the object is missing.
-
resolveKey
default void resolveKey(RowProcessingState rowProcessingState)
-
resolveFromPreviousRow
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.- Implementation Specification:
- Defaults to simply delegating to
resolveKey(InitializerData)
.
-
resolveFromPreviousRow
default void resolveFromPreviousRow(RowProcessingState rowProcessingState)
-
resolveInstance
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. 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
default void resolveInstance(RowProcessingState rowProcessingState)
-
resolveState
void resolveState(Data data)
-
resolveState
default void resolveState(RowProcessingState rowProcessingState)
-
resolveInstance
default void resolveInstance(@Nullable Object instance, Data data)
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
default void resolveInstance(@Nullable Object instance, RowProcessingState rowProcessingState)
-
initializeInstance
void initializeInstance(Data data)
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
default void initializeInstance(RowProcessingState rowProcessingState)
-
initializeInstanceFromParent
default void initializeInstanceFromParent(Object parentInstance, Data data)
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
void finishUpRow(Data data)
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
default void finishUpRow(RowProcessingState rowProcessingState)
-
endLoading
default void endLoading(Data data)
Lifecycle method called at the very end of the result values processing
-
endLoading
default void endLoading(RowProcessingState rowProcessingState)
-
isPartOfKey
boolean isPartOfKey()
Indicates whether this initializer is part of a key i.e. entity identifier, foreign key or collection key.
-
isPartOfKey
static boolean isPartOfKey(NavigablePath navigablePath, InitializerParent<?> parent)
-
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
default @Nullable EntityInitializer<?> asEntityInitializer()
A utility method to avoid casting explicitly to EntityInitializer- Returns:
- EntityInitializer if this is an instance of EntityInitializer otherwise
null
-
asEmbeddableInitializer
default @Nullable EmbeddableInitializer<?> asEmbeddableInitializer()
A utility method to avoid casting explicitly to EmbeddableInitializer- Returns:
- EmbeddableInitializer if this is an instance of EmbeddableInitializer otherwise
null
-
asCollectionInitializer
default @Nullable CollectionInitializer<?> asCollectionInitializer()
A utility method to avoid casting explicitly to CollectionInitializer- Returns:
- CollectionInitializer if this is an instance of CollectionInitializer otherwise
null
-
-