Package org.hibernate.sql.results.graph
Interface Initializer<Data extendsInitializerData>
- 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
@Incubatingpublic interfaceInitializer<Data extendsInitializerData>
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 staticInitializer<?>[]EMPTY_ARRAY
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default @NullableCollectionInitializer<?>asCollectionInitializer()A utility method to avoid casting explicitly to CollectionInitializerdefault @NullableEmbeddableInitializer<?>asEmbeddableInitializer()A utility method to avoid casting explicitly to EmbeddableInitializerdefault @NullableEntityInitializer<?>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 @NullableEntityInitializer<?>findOwningEntityInitializer()Find the entity initializer that owns this initializer by traversing upgetParent().static @NullableEntityInitializer<?>findOwningEntityInitializer(@NullableInitializer<?> 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 @NullableInitializerParent<?>getParent()Returns the parentInitializerornullif this is a result initializer.defaultObjectgetResolvedInstance(Data data)defaultObjectgetResolvedInstance(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(@NullableObject instance,Data data)Step 2.2 - Use the given instance as resolved instance for this initializer.default voidresolveInstance(@NullableObject 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 @NullableInitializerParent<?> getParent()
Returns the parentInitializerornullif this is a result initializer.
findOwningEntityInitializer
default @NullableEntityInitializer<?> findOwningEntityInitializer()
Find the entity initializer that owns this initializer by traversing upgetParent().
findOwningEntityInitializer
static @NullableEntityInitializer<?> findOwningEntityInitializer(@NullableInitializer<?> 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(@NullableObject 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(@NullableObject 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 @NullableEntityInitializer<?> asEntityInitializer()
A utility method to avoid casting explicitly to EntityInitializer- Returns:
- EntityInitializer if this is an instance of EntityInitializer otherwise
null
asEmbeddableInitializer
default @NullableEmbeddableInitializer<?> asEmbeddableInitializer()
A utility method to avoid casting explicitly to EmbeddableInitializer- Returns:
- EmbeddableInitializer if this is an instance of EmbeddableInitializer otherwise
null
asCollectionInitializer
default @NullableCollectionInitializer<?> asCollectionInitializer()
A utility method to avoid casting explicitly to CollectionInitializer- Returns:
- CollectionInitializer if this is an instance of CollectionInitializer otherwise
null