Interface CollectionPersister
- All Superinterfaces:
FilterRestrictable, Restrictable, WhereRestrictable
- All Known Implementing Classes:
AbstractCollectionPersister, BasicCollectionPersister, OneToManyPersister
CollectionPersister orchestrates rendering of SQL statements
corresponding to basic lifecycle events, including insert,
update, and delete statements, and their execution via
JDBC.
Concrete implementations of this interface handle one-to-many and many-to-many association cardinalities, and to a certain extent abstract the details of those mappings from collaborators.
Note that an instance of PersistentCollection may change roles.
This object implements persistence of a collection instance while the
instance is referenced in a particular role.
This interface defines a contract between the persistence strategy and
the actual persistent collection framework
and session. It does
not define operations that are required for querying collections, nor
for loading by outer join. Implementations are highly coupled to the
PersistentCollection hierarchy, since double dispatch is used to
load and update collection elements.
Unless a custom PersisterFactory is
used, it is expected that implementations of CollectionPersister
define a constructor accepting the following arguments:
-
Collection- The metadata about the collection to be handled by the persister, -
CollectionDataAccess- the second level caching strategy for this collection, and -
RuntimeModelCreationContext- access to additional information useful while constructing the persister.
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionvoidapplyBaseManyToManyRestrictions(Consumer<Predicate> predicateConsumer, TableGroup tableGroup, boolean useQualifier, Map<String, Filter> enabledFilters, Set<String> treatAsDeclarations, SqlAstCreationState creationState) voiddecompose(org.hibernate.action.queue.internal.PreparedCollectionMutation mutation, int ordinalBase, SharedSessionContractImplementor session, DecompositionContext decompositionContext, Consumer<FlushOperation> operationConsumer) Decomposes a prepared collection mutation into graph-native operations.voiddeleteRows(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Delete the persistent state of any elements that were removed from the collectionbooleanelementExists(Object key, Object element, SharedSessionContractImplementor session) default PluralAttributeMappingdefault intAccess to the collection's cache regionGet the structure used to store data into the collection's cache regionString[]getCollectionPropertyColumnAliases(String propertyName, String string) CollectionSemantics<?, ?> String[]Get the "space" that holds the persistent stateDeprecated, for removal: This API element is subject to removal in a future version.getElementByIndex(Object key, Object index, SharedSessionContractImplementor session, Object owner) Class<?> Return the element class of an array, or null otherwiseString[]getElementColumnAliases(String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant.boolean[]Get the persister of the element class, if this is a collection of entities (optional operation).Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType.Get the surrogate key generation strategy (optional operation)getIdentifierColumnAlias(String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant.Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType.String[]getIndexColumnAliases(String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant.boolean[]Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType.String[]getKeyColumnAliases(String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant.Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType.The NavigableRole for this collection.Get the persister of the entity that "owns" this collectiondefault StringgetRole()Get the name of this collection role (the fully qualified class name, extended by a "property path")intgetSize(Object key, SharedSessionContractImplementor session) Comparator<?> For sorted collections, the comparator to use.booleanhasCache()Is this collection role cacheablebooleanhasIndex()Is this an "indexed" collection? (list or map)booleanbooleanIs this an ordered collection? (An ordered collection is ordered by the initialization operation, not by sorting that happens in memory, as in the case of a sorted collection.)booleanDoes this collection implement "orphan delete"?booleanindexExists(Object key, Object index, SharedSessionContractImplementor session) voidinitialize(Object key, SharedSessionContractImplementor session) Initialize the given collection with the given keyvoidinsertRows(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Insert the persistent state of any new collection elementsdefault booleanisAffectedByEnabledFetchProfiles(LoadQueryInfluencers influencers) default booleanisAffectedByEnabledFilters(Set<ManagedMappingType> visitedTypes, LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKey) default booleanisAffectedByEnabledFilters(LoadQueryInfluencers influencers) default booleanisAffectedByEnabledFilters(LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKeyFilters) booleandefault booleanisAffectedByEntityGraph(LoadQueryInfluencers influencers) booleanisArray()Is this an array?default booleanbooleanIs cascade delete handled by the database-level foreign key constraint definition?default booleanbooleanIs this collection "inverse", so state changes are not propagated to the database.booleanisLazy()Is this collection lazily initialized?booleanIs this a many-to-many association? Note that this is mainly a convenience feature as the single persister does not contain all the information needed to handle a many-to-many itself, as internally it is looked at as two many-to-ones.booleanCan the elements of this collection change?booleanIs this a one-to-many association?booleanIs this an array of primitive values?booleanbooleandefault booleanbooleanDoes this collection cause version increment of the owning entity?default booleanWhetherremove(Object, SharedSessionContractImplementor)might actually do something, or if it is definitely a no-op.voidvoidprocessQueuedOps(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Process queued operations within the PersistentCollection.voidrecreate(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) (Re)create the collection's persistent statevoidremove(Object id, SharedSessionContractImplementor session) Completely remove the persistent state of the collectionselectFragment(String alias, String columnSuffix) Generate a list of collection index and element columnsvoidupdateRows(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Update the persistent state of any elements that were modifiedbooleanMethods inherited from interface FilterRestrictable
applyFilterRestrictionsMethods inherited from interface Restrictable
applyBaseRestrictionsMethods inherited from interface WhereRestrictable
applyWhereRestrictions, hasWhereRestrictions
-
Method Details
-
getRole
-
getAttributeMapping
-
getOwnerEntityPersister
Get the persister of the entity that "owns" this collection -
hasCache
boolean hasCache()Is this collection role cacheable -
needsRemove
default boolean needsRemove()Whetherremove(Object, SharedSessionContractImplementor)might actually do something, or if it is definitely a no-op. -
getRowMutationOperations
-
isRowInsertEnabled
-
isRowDeleteEnabled
-
getIndexColumnIsSettable
-
getElementColumnIsSettable
-
getIndexIncrementer
-
getCacheAccessStrategy
Access to the collection's cache region -
getCacheEntryStructure
Get the structure used to store data into the collection's cache region -
useShallowQueryCacheLayout
-
getElementClass
-
isPrimitiveArray
boolean isPrimitiveArray()Is this an array of primitive values? -
isArray
boolean isArray()Is this an array? -
isOneToMany
boolean isOneToMany()Is this a one-to-many association? -
isManyToMany
boolean isManyToMany()Is this a many-to-many association? Note that this is mainly a convenience feature as the single persister does not contain all the information needed to handle a many-to-many itself, as internally it is looked at as two many-to-ones. -
hasIndex
boolean hasIndex()Is this an "indexed" collection? (list or map) -
isLazy
boolean isLazy()Is this collection lazily initialized? -
isInverse
boolean isInverse()Is this collection "inverse", so state changes are not propagated to the database. -
getGenerator
Get the surrogate key generation strategy (optional operation) -
hasOrphanDelete
boolean hasOrphanDelete()Does this collection implement "orphan delete"? -
hasOrdering
boolean hasOrdering()Is this an ordered collection? (An ordered collection is ordered by the initialization operation, not by sorting that happens in memory, as in the case of a sorted collection.) -
hasManyToManyOrdering
boolean hasManyToManyOrdering() -
getCollectionSpaces
-
isCascadeDeleteEnabled
boolean isCascadeDeleteEnabled()Is cascade delete handled by the database-level foreign key constraint definition? -
isVersioned
boolean isVersioned()Does this collection cause version increment of the owning entity? -
isMutable
boolean isMutable()Can the elements of this collection change? -
postInstantiate
- Throws:
MappingException
-
getFactory
-
isAffectedByEnabledFilters
-
isAffectedByEnabledFilters
default boolean isAffectedByEnabledFilters(@Nonnull LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKeyFilters) -
isAffectedByEnabledFilters
default boolean isAffectedByEnabledFilters(@Nonnull Set<ManagedMappingType> visitedTypes, @Nonnull LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKey) -
isAffectedByEntityGraph
-
isAffectedByEnabledFetchProfiles
-
isExtraLazy
default boolean isExtraLazy() -
getBatchSize
default int getBatchSize() -
isBatchLoadable
default boolean isBatchLoadable() -
isSubselectLoadable
default boolean isSubselectLoadable() -
getMappedByProperty
-
getSortingComparator
For sorted collections, the comparator to use. Non-parameterized because for SORTED_SET the elements are compared but for SORTED_MAP the keys are compared- See Also:
-
getCollectionSemantics
-
applyBaseManyToManyRestrictions
-
getKeyColumnAliases
@Nonnull @Deprecated(since="6", forRemoval=true) String[] getKeyColumnAliases(@Nonnull String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParserGenerates the collection's key column aliases, based on the given suffix.- Parameters:
suffix- The suffix to use in the key column alias generation.- Returns:
- The key column aliases.
-
getIndexColumnAliases
@Nullable @Deprecated(since="6", forRemoval=true) String[] getIndexColumnAliases(@Nonnull String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParserGenerates the collection's index column aliases, based on the given suffix.- Parameters:
suffix- The suffix to use in the index column alias generation.- Returns:
- The key column aliases, or null if not indexed.
-
getElementColumnAliases
@Nonnull @Deprecated(since="6", forRemoval=true) String[] getElementColumnAliases(@Nonnull String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParserGenerates the collection's element column aliases, based on the given suffix.- Parameters:
suffix- The suffix to use in the element column alias generation.- Returns:
- The key column aliases.
-
getIdentifierColumnAlias
@Nullable @Deprecated(since="6", forRemoval=true) String getIdentifierColumnAlias(@Nonnull String suffix) Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParserGenerates the collection's identifier column aliases, based on the given suffix.- Parameters:
suffix- The suffix to use in the key column alias generation.- Returns:
- The key column aliases.
-
getCollectionType
Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType. Corresponding mapping metamodel calls should be used instead - here (generally),PluralAttributeMappingGet the associatedType -
getKeyType
Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType. Corresponding mapping metamodel calls should be used instead - here,PluralAttributeMapping.getKeyDescriptor()Get the "key" type (the type of the foreign key) -
getIndexType
Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType. Corresponding mapping metamodel calls should be used instead - here,PluralAttributeMapping.getIndexDescriptor()Get the "index" type for a list or map (optional operation) -
getElementType
Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType. Corresponding mapping metamodel calls should be used instead - here,PluralAttributeMapping.getElementDescriptor()Get the "element" type -
getIdentifierType
Deprecated, for removal: This API element is subject to removal in a future version.Hibernate is moving away fromType. Corresponding mapping metamodel calls should be used instead - here,PluralAttributeMapping.getIdentifierDescriptor()Get the type of the surrogate key -
getIdentifierColumnName
-
getTableName
-
selectFragment
-
getCollectionPropertyColumnAliases
-
getElementPersister
Get the persister of the element class, if this is a collection of entities (optional operation). Note that for a one-to-many association, the returned persister must beOuterJoinLoadable.
Type.