Class EntityInitializerImpl
java.lang.Object
org.hibernate.sql.results.graph.internal.AbstractInitializer<EntityInitializerImpl.EntityInitializerData>
org.hibernate.sql.results.graph.entity.internal.EntityInitializerImpl
- All Implemented Interfaces:
EntityInitializer<EntityInitializerImpl.EntityInitializerData>
,Initializer<EntityInitializerImpl.EntityInitializerData>
,InitializerParent<EntityInitializerImpl.EntityInitializerData>
public class EntityInitializerImpl
extends AbstractInitializer<EntityInitializerImpl.EntityInitializerData>
implements EntityInitializer<EntityInitializerImpl.EntityInitializerData>
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface org.hibernate.sql.results.graph.Initializer
Initializer.State
-
Field Summary
Fields inherited from class org.hibernate.sql.results.graph.internal.AbstractInitializer
initializerId
Fields inherited from interface org.hibernate.sql.results.graph.Initializer
EMPTY_ARRAY
-
Constructor Summary
ConstructorsConstructorDescriptionEntityInitializerImpl
(EntityResultGraphNode resultDescriptor, String sourceAlias, @Nullable Fetch identifierFetch, @Nullable Fetch discriminatorFetch, @Nullable DomainResult<?> keyResult, @Nullable DomainResult<Object> rowIdResult, NotFoundAction notFoundAction, boolean affectedByFilter, @Nullable InitializerParent<?> parent, boolean isResultInitializer, AssemblerCreationState creationState) -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
createInitializerData
(RowProcessingState rowProcessingState) static @Nullable EntityPersister
determineConcreteEntityDescriptor
(RowProcessingState rowProcessingState, @Nullable BasicResultAssembler<?> discriminatorAssembler, EntityPersister entityDescriptor) protected Object[]
protected void
forEachSubInitializer
(BiConsumer<Initializer<?>, RowProcessingState> consumer, InitializerData data) protected @Nullable DomainResultAssembler<?>[][]
getAttributeInterceptor
(Object entity) protected @Nullable BasicResultAssembler<?>
Get the descriptor for the type of entity being initializedprotected Object
@Nullable Object
protected DomainResultAssembler<?>
@Nullable DomainResultAssembler<?>
@Nullable InitializerParent<?>
Returns the parentInitializer
ornull
if this is a result initializer.protected Type[]
getParentEntityAttributeTypes
(String attributeName) protected @Nullable DomainResultAssembler<Object>
protected Initializer<?>[][]
Get the target entity instance for the currently processing "row".protected @Nullable DomainResultAssembler<?>
boolean
Indicates whether this initializer has sub-initializers which are lazy.protected void
initializeAttributeType
(Type[] attributeTypes, EntityPersister entityDescriptor, String attributeName) protected void
void
Step 3 - Initialize the state of the instance resolved inInitializer.resolveInstance(Data)
from the current row values.void
initializeInstanceFromParent
(Object parentInstance, EntityInitializerImpl.EntityInitializerData data) Step 3.1 - Initialize the state of the instance as extracted from the given parentInstance.protected void
protected Object
boolean
isEager()
Indicates whether calling resolve is needed when the object for this initializer is initialized already.protected boolean
boolean
Indicates whether this initializer is part of a key i.e.boolean
boolean
Indicates if this is a result or fetch initializer.protected void
preLoad
(EntityInitializerImpl.EntityInitializerData data, Object[] resolvedEntityState) protected void
registerLoadingEntity
(EntityInitializerImpl.EntityInitializerData data, Object instance) protected void
registerNaturalIdResolution
(EntityInitializerImpl.EntityInitializerData data, PersistenceContext persistenceContext, Object[] resolvedEntityState) protected void
registerPossibleUniqueKeyEntries
(EntityInitializerImpl.EntityInitializerData data, Object[] resolvedEntityState, SharedSessionContractImplementor session) protected void
void
resetResolvedEntityRegistrations
(RowProcessingState rowProcessingState) Resets the resolved entity registrations by i.e.protected Object
protected void
protected Object
Used by Hibernate Reactiveprotected void
@Nullable EntityKey
resolveEntityKeyOnly
(RowProcessingState rowProcessingState) protected void
void
Step 1.2 - Special variant ofInitializer.resolveKey(InitializerData)
that allows the reuse of key value and instance value from the previous row.void
resolveInstance
(Object instance, EntityInitializerImpl.EntityInitializerData data) Step 2.2 - Use the given instance as resolved instance for this initializer.void
Step 2.1 - Using the key resolved inInitializer.resolveKey(Data)
, resolve the instance (of the thing initialized) to use for the current row.protected void
void
Step 1.1 - Resolve the key value for this initializer for the current row and then recurse to the sub-initializers.protected void
resolveKey
(EntityInitializerImpl.EntityInitializerData data, boolean entityKeyOnly) protected void
void
protected void
protected boolean
protected void
takeSnapshot
(EntityInitializerImpl.EntityInitializerData data, SharedSessionContractImplementor session, PersistenceContext persistenceContext, EntityEntry entityEntry, Object[] resolvedEntityState) toString()
protected void
updateCaches
(EntityInitializerImpl.EntityInitializerData data, SharedSessionContractImplementor session, PersistenceContext persistenceContext, Object[] resolvedEntityState, Object version) protected void
protected boolean
Methods inherited from class org.hibernate.sql.results.graph.internal.AbstractInitializer
finishUpRow, getData, startLoading
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.hibernate.sql.results.graph.entity.EntityInitializer
asEntityInitializer, getConcreteDescriptor, getEntityIdentifier, getTargetInstance, isEntityInitializer
Methods inherited from interface org.hibernate.sql.results.graph.Initializer
asCollectionInitializer, asEmbeddableInitializer, endLoading, endLoading, findOwningEntityInitializer, finishUpRow, finishUpRow, getData, getResolvedInstance, getResolvedInstance, initializeInstance, initializeInstanceFromParent, isCollectionInitializer, isEmbeddableInitializer, isLazyCapable, resolveFromPreviousRow, resolveInstance, resolveInstance, resolveKey, resolveState, startLoading
-
Constructor Details
-
EntityInitializerImpl
public EntityInitializerImpl(EntityResultGraphNode resultDescriptor, String sourceAlias, @Nullable Fetch identifierFetch, @Nullable Fetch discriminatorFetch, @Nullable DomainResult<?> keyResult, @Nullable DomainResult<Object> rowIdResult, NotFoundAction notFoundAction, boolean affectedByFilter, @Nullable InitializerParent<?> parent, boolean isResultInitializer, AssemblerCreationState creationState)
-
-
Method Details
-
createInitializerData
protected EntityInitializerImpl.EntityInitializerData createInitializerData(RowProcessingState rowProcessingState) - Specified by:
createInitializerData
in classAbstractInitializer<EntityInitializerImpl.EntityInitializerData>
-
resolveKey
Description copied from interface:Initializer
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.- Specified by:
resolveKey
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
- Overrides:
resolveKey
in classAbstractInitializer<EntityInitializerImpl.EntityInitializerData>
-
getEntityIdentifier
- Specified by:
getEntityIdentifier
in interfaceEntityInitializer<EntityInitializerImpl.EntityInitializerData>
-
resolveEntityKeyOnly
- Specified by:
resolveEntityKeyOnly
in interfaceEntityInitializer<EntityInitializerImpl.EntityInitializerData>
-
resetResolvedEntityRegistrations
Description copied from interface:EntityInitializer
Resets the resolved entity registrations by i.e. removingEntityHolder
. -
resolveKey
-
resolveInstanceSubInitializers
-
resolveKeySubInitializers
-
resolveEntityKey
@EnsuresNonNull("data.entityKey") protected void resolveEntityKey(EntityInitializerImpl.EntityInitializerData data, Object id) -
setMissing
-
resolveFromPreviousRow
Description copied from interface:Initializer
Step 1.2 - Special variant ofInitializer.resolveKey(InitializerData)
that allows the reuse of key value and instance value from the previous row.- Specified by:
resolveFromPreviousRow
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
initializeInstanceFromParent
public void initializeInstanceFromParent(Object parentInstance, EntityInitializerImpl.EntityInitializerData data) Description copied from interface:Initializer
Step 3.1 - Initialize the state of the instance as extracted from the given parentInstance. Extraction can be done with theInitializer.getInitializedPart()
. 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.- Specified by:
initializeInstanceFromParent
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
isResultInitializer
public boolean isResultInitializer()Description copied from interface:Initializer
Indicates if this is a result or fetch initializer.- Specified by:
isResultInitializer
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
getInitializedPart
- Specified by:
getInitializedPart
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
getIdentifierAssembler
-
getEntityDescriptor
Description copied from interface:EntityInitializer
Get the descriptor for the type of entity being initialized- Specified by:
getEntityDescriptor
in interfaceEntityInitializer<EntityInitializerImpl.EntityInitializerData>
-
getTargetInstance
Description copied from interface:EntityInitializer
Get the target entity instance for the currently processing "row".- Specified by:
getTargetInstance
in interfaceEntityInitializer<EntityInitializerImpl.EntityInitializerData>
-
getParent
Description copied from interface:Initializer
Returns the parentInitializer
ornull
if this is a result initializer.- Specified by:
getParent
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
getParentEntityAttributeTypes
-
initializeAttributeType
protected void initializeAttributeType(Type[] attributeTypes, EntityPersister entityDescriptor, String attributeName) -
determineConcreteEntityDescriptor
public static @Nullable EntityPersister determineConcreteEntityDescriptor(RowProcessingState rowProcessingState, @Nullable BasicResultAssembler<?> discriminatorAssembler, EntityPersister entityDescriptor) throws WrongClassException - Throws:
WrongClassException
-
useEmbeddedIdentifierInstanceAsEntity
protected boolean useEmbeddedIdentifierInstanceAsEntity(EntityInitializerImpl.EntityInitializerData data) -
resolveInstance
Description copied from interface:Initializer
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.- Specified by:
resolveInstance
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
resolveInstance
Description copied from interface:Initializer
Step 2.1 - Using the key resolved inInitializer.resolveKey(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,Initializer.getResolvedInstance(RowProcessingState)
will return that instance.- Specified by:
resolveInstance
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
resolveEntityInstance1
-
getEntityFromExecutionContext
-
upgradeLockMode
-
resolveEntityInstance2
Used by Hibernate Reactive -
resolveEntityInstance
-
instantiateEntity
-
registerLoadingEntity
protected void registerLoadingEntity(EntityInitializerImpl.EntityInitializerData data, Object instance) -
registerReloadedEntity
-
initializeInstance
Description copied from interface:Initializer
Step 3 - Initialize the state of the instance resolved inInitializer.resolveInstance(Data)
from the current row values. All resolved state for the current row is injected into the resolved instance- Specified by:
initializeInstance
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
- Overrides:
initializeInstance
in classAbstractInitializer<EntityInitializerImpl.EntityInitializerData>
-
consistentInstance
-
initializeEntityInstance
-
registerNaturalIdResolution
protected void registerNaturalIdResolution(EntityInitializerImpl.EntityInitializerData data, PersistenceContext persistenceContext, Object[] resolvedEntityState) -
extractConcreteTypeStateValues
-
resolveState
- Specified by:
resolveState
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
resolveEntityState
-
skipInitialization
-
preLoad
protected void preLoad(EntityInitializerImpl.EntityInitializerData data, Object[] resolvedEntityState) -
isPartOfKey
public boolean isPartOfKey()Description copied from interface:Initializer
Indicates whether this initializer is part of a key i.e. entity identifier, foreign key or collection key.- Specified by:
isPartOfKey
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
isEager
public boolean isEager()Description copied from interface:Initializer
Indicates whether calling resolve is needed when the object for this initializer is initialized already.- Specified by:
isEager
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
hasLazySubInitializers
public boolean hasLazySubInitializers()Description copied from interface:Initializer
Indicates whether this initializer has sub-initializers which are lazy.- Specified by:
hasLazySubInitializers
in interfaceInitializer<EntityInitializerImpl.EntityInitializerData>
-
isPreviousRowReuse
public boolean isPreviousRowReuse() -
getConcreteDescriptor
- Specified by:
getConcreteDescriptor
in interfaceEntityInitializer<EntityInitializerImpl.EntityInitializerData>
-
initializeSubInstancesFromParent
-
forEachSubInitializer
protected void forEachSubInitializer(BiConsumer<Initializer<?>, RowProcessingState> consumer, InitializerData data) - Specified by:
forEachSubInitializer
in classAbstractInitializer<EntityInitializerImpl.EntityInitializerData>
-
getAttributeInterceptor
-
toString
-
getVersionAssembler
-
getRowIdAssembler
-
getAssemblers
-
getDiscriminatorAssembler
-
isKeyManyToOne
protected boolean isKeyManyToOne() -
getSubInitializers
-
getKeyAssembler
-