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 classInitializer.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 voidendLoading(Data data)Lifecycle method called at the very end of the result values processingdefault voidendLoading(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().voidfinishUpRow(Data data)Lifecycle method called at the end of the current row processing.default voidfinishUpRow(RowProcessingState rowProcessingState)DatagetData(RowProcessingState rowProcessingState)The current data of this initializer.ModelPartgetInitializedPart()NavigablePathgetNavigablePath()default @Nullable InitializerParent<?>getParent()Returns the parentInitializerornullif this is a result initializer.default ObjectgetResolvedInstance(Data data)default ObjectgetResolvedInstance(RowProcessingState rowProcessingState)booleanhasLazySubInitializers()Indicates whether this initializer has sub-initializers which are lazy.voidinitializeInstance(Data data)Step 3 - Initialize the state of the instance resolved inresolveInstance(Data)from the current row values.default voidinitializeInstance(RowProcessingState rowProcessingState)default voidinitializeInstanceFromParent(Object parentInstance, Data data)Step 3.1 - Initialize the state of the instance as extracted from the given parentInstance.default voidinitializeInstanceFromParent(Object parentInstance, RowProcessingState rowProcessingState)default booleanisCollectionInitializer()booleanisEager()Indicates whether calling resolve is needed when the object for this initializer is initialized already.default booleanisEmbeddableInitializer()default booleanisEntityInitializer()default booleanisLazyCapable()Indicates whether this initializer or one of its sub-parts could be made lazy.booleanisPartOfKey()Indicates whether this initializer is part of a key i.e.static booleanisPartOfKey(NavigablePath navigablePath, InitializerParent<?> parent)booleanisResultInitializer()Indicates if this is a result or fetch initializer.default voidresolveFromPreviousRow(Data data)Step 1.2 - Special variant ofresolveKey(InitializerData)that allows the reuse of key value and instance value from the previous row.default voidresolveFromPreviousRow(RowProcessingState rowProcessingState)default voidresolveInstance(@Nullable Object instance, Data data)Step 2.2 - Use the given instance as resolved instance for this initializer.default voidresolveInstance(@Nullable Object instance, RowProcessingState rowProcessingState)voidresolveInstance(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 voidresolveInstance(RowProcessingState rowProcessingState)voidresolveKey(Data data)Step 1.1 - Resolve the key value for this initializer for the current row and then recurse to the sub-initializers.default voidresolveKey(RowProcessingState rowProcessingState)voidresolveState(Data data)default voidresolveState(RowProcessingState rowProcessingState)voidstartLoading(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 parentInitializerornullif 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 registerInitializerDatafor 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 theJdbcValuesCacheHitto 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
-
-