Interface CollectionPersister
- All Superinterfaces:
FilterRestrictable
,Restrictable
,WhereRestrictable
- All Known Implementing Classes:
AbstractCollectionPersister
,BasicCollectionPersister
,MockCollectionPersister
,OneToManyPersister
,ProcessorSessionFactory.ElementCollectionPersister
,ProcessorSessionFactory.ToManyAssociationPersister
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 TypeMethodDescriptionvoid
applyBaseManyToManyRestrictions
(Consumer<Predicate> predicateConsumer, TableGroup tableGroup, boolean useQualifier, Map<String, Filter> enabledFilters, Set<String> treatAsDeclarations, SqlAstCreationState creationState) void
deleteRows
(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Delete the persistent state of any elements that were removed from the collectionboolean
elementExists
(Object key, Object element, SharedSessionContractImplementor session) default PluralAttributeMapping
default int
Access 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.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
.default BeforeExecutionGenerator
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.usegetGenerator()
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.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
.getManyToManyFilterFragment
(TableGroup tableGroup, Map<String, Filter> enabledFilters) The NavigableRole for this collection.Get the persister of the entity that "owns" this collectiondefault String
getRole()
Get the name of this collection role (the fully qualified class name, extended by a "property path")int
getSize
(Object key, SharedSessionContractImplementor session) Comparator<?>
For sorted collections, the comparator to use.boolean
hasCache()
Is this collection role cacheableboolean
hasIndex()
Is this an "indexed" collection? (list or map)boolean
boolean
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.)boolean
Does this collection implement "orphan delete"?boolean
indexExists
(Object key, Object index, SharedSessionContractImplementor session) void
initialize
(Object key, SharedSessionContractImplementor session) Initialize the given collection with the given keyvoid
insertRows
(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Insert the persistent state of any new collection elementsdefault boolean
isAffectedByEnabledFetchProfiles
(LoadQueryInfluencers influencers) default boolean
isAffectedByEnabledFilters
(Set<ManagedMappingType> visitedTypes, LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKey) default boolean
isAffectedByEnabledFilters
(LoadQueryInfluencers influencers) default boolean
isAffectedByEnabledFilters
(LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKeyFilters) boolean
default boolean
isAffectedByEntityGraph
(LoadQueryInfluencers influencers) boolean
isArray()
Is this an array?default boolean
boolean
Is cascade delete handled by the database-level foreign key constraint definition?default boolean
boolean
Is this collection "inverse", so state changes are not propagated to the database.boolean
isLazy()
Is this collection lazily initialized?boolean
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.boolean
Can the elements of this collection change?boolean
Is this a one-to-many association?boolean
Is this an array of primitive values?default boolean
boolean
Does this collection cause version increment of the owning entity?default boolean
Whetherremove(Object, SharedSessionContractImplementor)
might actually do something, or if it is definitely a no-op.void
void
processQueuedOps
(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Process queued operations within the PersistentCollection.void
recreate
(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) (Re)create the collection's persistent statevoid
remove
(Object id, SharedSessionContractImplementor session) Completely remove the persistent state of the collectionselectFragment
(String alias, String columnSuffix) Generate a list of collection index and element columnsvoid
updateRows
(PersistentCollection<?> collection, Object key, SharedSessionContractImplementor session) Update the persistent state of any elements that were modifiedboolean
Methods inherited from interface org.hibernate.metamodel.mapping.FilterRestrictable
applyFilterRestrictions, applyFilterRestrictions
Methods inherited from interface org.hibernate.metamodel.mapping.Restrictable
applyBaseRestrictions, applyBaseRestrictions
Methods inherited from interface org.hibernate.metamodel.mapping.WhereRestrictable
applyWhereRestrictions, hasWhereRestrictions
-
Method Details
-
getRole
Get the name of this collection role (the fully qualified class name, extended by a "property path") -
getAttributeMapping
-
getOwnerEntityPersister
EntityPersister 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. -
getCacheAccessStrategy
CollectionDataAccess getCacheAccessStrategy()Access to the collection's cache region -
getCacheEntryStructure
CacheEntryStructure getCacheEntryStructure()Get the structure used to store data into the collection's cache region -
useShallowQueryCacheLayout
-
getElementClass
Class<?> getElementClass()Return the element class of an array, or null otherwise -
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. -
getManyToManyFilterFragment
-
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. -
getIdentifierGenerator
Deprecated.usegetGenerator()
Get the surrogate key generation strategy (optional operation) -
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
String[] getCollectionSpaces()Get the "space" that holds the persistent state -
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
SessionFactoryImplementor getFactory() -
isAffectedByEnabledFilters
-
isAffectedByEnabledFilters
default boolean isAffectedByEnabledFilters(LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKeyFilters) -
isAffectedByEnabledFilters
default boolean isAffectedByEnabledFilters(Set<ManagedMappingType> visitedTypes, LoadQueryInfluencers influencers, boolean onlyApplyForLoadByKey) -
isAffectedByEntityGraph
-
isAffectedByEnabledFetchProfiles
-
isExtraLazy
default boolean isExtraLazy() -
getBatchSize
default int getBatchSize() -
isBatchLoadable
default boolean isBatchLoadable() -
isSubselectLoadable
default boolean isSubselectLoadable() -
getMappedByProperty
String getMappedByProperty()- Returns:
- the name of the property this collection is mapped by
-
getSortingComparator
Comparator<?> 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 -
getCollectionSemantics
CollectionSemantics<?,?> getCollectionSemantics() -
applyBaseManyToManyRestrictions
void applyBaseManyToManyRestrictions(Consumer<Predicate> predicateConsumer, TableGroup tableGroup, boolean useQualifier, Map<String, Filter> enabledFilters, Set<String> treatAsDeclarations, SqlAstCreationState creationState) -
getKeyColumnAliases
Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParser
Generates 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
Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParser
Generates 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
Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParser
Generates 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
Deprecated, for removal: This API element is subject to removal in a future version.Read-by-position makes this irrelevant. Currently still used bySQLQueryParser
Generates 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),PluralAttributeMapping
Get 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
String getIdentifierColumnName() -
getTableName
String getTableName() -
selectFragment
Generate a list of collection index and element columns -
getCollectionPropertyColumnAliases
-
getElementPersister
EntityPersister 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
.