Interface EntityPersister

    • Field Detail

      • ENTITY_ID

        static final java.lang.String ENTITY_ID
        The property name of the "special" identifier property in HQL
        See Also:
        Constant Field Values
    • Method Detail

      • generateEntityDefinition

        void generateEntityDefinition()
        Generate the entity definition for this object. This must be done for all entity persisters before calling postInstantiate().
      • postInstantiate

        void postInstantiate()
                      throws MappingException
        Finish the initialization of this object. generateEntityDefinition() must be called for all entity persisters before calling this method.

        Called only once per SessionFactory lifecycle, after all entity persisters have been instantiated.

        Throws:
        MappingException - Indicates an issue in the metadata.
      • getFactory

        SessionFactoryImplementor getFactory()
        Return the SessionFactory to which this persister "belongs".
        Returns:
        The owning SessionFactory.
      • getEntityEntryFactory

        EntityEntryFactory getEntityEntryFactory()
        Get the EntityEntryFactory indicated for the entity mapped by this persister.
        Returns:
        The proper EntityEntryFactory.
      • getRootEntityName

        java.lang.String getRootEntityName()
        Returns an object that identifies the space in which identifiers of this entity hierarchy are unique. Might be a table name, a JNDI URL, etc.
        Returns:
        The root entity name.
      • getEntityName

        java.lang.String getEntityName()
        The entity name which this persister maps.
        Returns:
        The name of the entity which this persister maps.
      • getEntityMetamodel

        EntityMetamodel getEntityMetamodel()
        Retrieve the underlying entity metamodel instance...
        Returns:
        The metamodel
      • initializeEnhancedEntityUsedAsProxy

        default java.lang.Object initializeEnhancedEntityUsedAsProxy​(java.lang.Object entity,
                                                                     java.lang.String nameOfAttributeBeingAccessed,
                                                                     SharedSessionContractImplementor session)
        Called from EnhancementAsProxyLazinessInterceptor to trigger load of the entity's non-lazy state as well as the named attribute we are accessing if it is still uninitialized after fetching non-lazy state
      • isSubclassEntityName

        boolean isSubclassEntityName​(java.lang.String entityName)
        Determine whether the given name represents a subclass entity (or this entity itself) of the entity mapped by this persister.
        Parameters:
        entityName - The entity name to be checked.
        Returns:
        True if the given entity name represents either the entity mapped by this persister or one of its subclass entities; false otherwise.
      • getPropertySpaces

        java.io.Serializable[] getPropertySpaces()
        Returns an array of objects that identify spaces in which properties of this entity are persisted, for instances of this class only.

        For most implementations, this returns the complete set of table names to which instances of the mapped entity are persisted (not accounting for superclass entity mappings).

        Returns:
        The property spaces.
      • getQuerySpaces

        java.io.Serializable[] getQuerySpaces()
        Returns an array of objects that identify spaces in which properties of this entity are persisted, for instances of this class and its subclasses.

        Much like getPropertySpaces(), except that here we include subclass entity spaces.

        Returns:
        The query spaces.
      • hasProxy

        boolean hasProxy()
        Determine whether this entity supports dynamic proxies.
        Returns:
        True if the entity has dynamic proxy support; false otherwise.
      • hasCollections

        boolean hasCollections()
        Determine whether this entity contains references to persistent collections.
        Returns:
        True if the entity does contain persistent collections; false otherwise.
      • hasMutableProperties

        boolean hasMutableProperties()
        Determine whether any properties of this entity are considered mutable.
        Returns:
        True if any properties of the entity are mutable; false otherwise (meaning none are).
      • hasSubselectLoadableCollections

        boolean hasSubselectLoadableCollections()
        Determine whether this entity contains references to persistent collections which are fetchable by subselect?
        Returns:
        True if the entity contains collections fetchable by subselect; false otherwise.
      • hasCascades

        boolean hasCascades()
        Determine whether this entity has any non-none cascading.
        Returns:
        True if the entity has any properties with a cascade other than NONE; false otherwise (aka, no cascading).
      • isMutable

        boolean isMutable()
        Determine whether instances of this entity are considered mutable.
        Returns:
        True if the entity is considered mutable; false otherwise.
      • isInherited

        boolean isInherited()
        Determine whether the entity is inherited one or more other entities. In other words, is this entity a subclass of other entities.
        Returns:
        True if other entities extend this entity; false otherwise.
      • isIdentifierAssignedByInsert

        boolean isIdentifierAssignedByInsert()
        Are identifiers of this entity assigned known before the insert execution? Or, are they generated (in the database) by the insert execution.
        Returns:
        True if identifiers for this entity are generated by the insert execution.
      • getPropertyType

        Type getPropertyType​(java.lang.String propertyName)
                      throws MappingException
        Get the type of a particular property by name.
        Parameters:
        propertyName - The name of the property for which to retrieve the type.
        Returns:
        The type.
        Throws:
        MappingException - Typically indicates an unknown property name.
      • findDirty

        int[] findDirty​(java.lang.Object[] currentState,
                        java.lang.Object[] previousState,
                        java.lang.Object owner,
                        SharedSessionContractImplementor session)
        Compare the two snapshots to determine if they represent dirty state.
        Parameters:
        currentState - The current snapshot
        previousState - The baseline snapshot
        owner - The entity containing the state
        session - The originating session
        Returns:
        The indices of all dirty properties, or null if no properties were dirty.
      • findModified

        int[] findModified​(java.lang.Object[] old,
                           java.lang.Object[] current,
                           java.lang.Object object,
                           SharedSessionContractImplementor session)
        Compare the two snapshots to determine if they represent modified state.
        Parameters:
        old - The baseline snapshot
        current - The current snapshot
        object - The entity containing the state
        session - The originating session
        Returns:
        The indices of all modified properties, or null if no properties were modified.
      • hasIdentifierProperty

        boolean hasIdentifierProperty()
        Determine whether the entity has a particular property holding the identifier value.
        Returns:
        True if the entity has a specific property holding identifier value.
      • canExtractIdOutOfEntity

        boolean canExtractIdOutOfEntity()
        Determine whether detached instances of this entity carry their own identifier value.

        The other option is the deprecated feature where users could supply the id during session calls.

        Returns:
        True if either (1) hasIdentifierProperty() or (2) the identifier is an embedded composite identifier; false otherwise.
      • isVersioned

        boolean isVersioned()
        Determine whether optimistic locking by column is enabled for this entity.
        Returns:
        True if optimistic locking by column (i.e., or ) is enabled; false otherwise.
      • getVersionType

        VersionType getVersionType()
        If isVersioned(), then what is the type of the property holding the locking value.
        Returns:
        The type of the version property; or null, if not versioned.
      • getVersionProperty

        int getVersionProperty()
        If isVersioned(), then what is the index of the property holding the locking value.
        Returns:
        The type of the version property; or -66, if not versioned.
      • hasNaturalIdentifier

        boolean hasNaturalIdentifier()
        Determine whether this entity defines a natural identifier.
        Returns:
        True if the entity defines a natural id; false otherwise.
      • getNaturalIdentifierProperties

        int[] getNaturalIdentifierProperties()
        If the entity defines a natural id (hasNaturalIdentifier()), which properties make up the natural id.
        Returns:
        The indices of the properties making of the natural id; or null, if no natural id is defined.
      • getNaturalIdentifierSnapshot

        java.lang.Object[] getNaturalIdentifierSnapshot​(java.io.Serializable id,
                                                        SharedSessionContractImplementor session)
        Retrieve the current state of the natural-id properties from the database.
        Parameters:
        id - The identifier of the entity for which to retrieve the natural-id values.
        session - The session from which the request originated.
        Returns:
        The natural-id snapshot.
      • getIdentifierGenerator

        IdentifierGenerator getIdentifierGenerator()
        Determine which identifier generation strategy is used for this entity.
        Returns:
        The identifier generation strategy.
      • hasLazyProperties

        boolean hasLazyProperties()
        Determine whether this entity defines any lazy properties (ala bytecode instrumentation).
        Returns:
        True if the entity has properties mapped as lazy; false otherwise.
      • multiLoad

        java.util.List multiLoad​(java.io.Serializable[] ids,
                                 SharedSessionContractImplementor session,
                                 MultiLoadOptions loadOptions)
        Performs a load of multiple entities (of this type) by identifier simultaneously.
        Parameters:
        ids - The identifiers to load
        session - The originating Session
        loadOptions - The options for loading
        Returns:
        The loaded, matching entities
      • update

        void update​(java.io.Serializable id,
                    java.lang.Object[] fields,
                    int[] dirtyFields,
                    boolean hasDirtyCollection,
                    java.lang.Object[] oldFields,
                    java.lang.Object oldVersion,
                    java.lang.Object object,
                    java.lang.Object rowId,
                    SharedSessionContractImplementor session)
             throws HibernateException
        Update a persistent instance
        Throws:
        HibernateException
      • getPropertyTypes

        Type[] getPropertyTypes()
        Get the Hibernate types of the class properties
      • getPropertyNames

        java.lang.String[] getPropertyNames()
        Get the names of the class properties - doesn't have to be the names of the actual Java properties (used for XML generation only)
      • getPropertyInsertability

        boolean[] getPropertyInsertability()
        Get the "insertability" of the properties of this class (does the property appear in an SQL INSERT)
      • getPropertyInsertGenerationInclusions

        @Deprecated
        ValueInclusion[] getPropertyInsertGenerationInclusions()
        Deprecated.
        Replaced internally with InMemoryValueGenerationStrategy / InDatabaseValueGenerationStrategy
        Which of the properties of this class are database generated values on insert?
      • getPropertyUpdateGenerationInclusions

        @Deprecated
        ValueInclusion[] getPropertyUpdateGenerationInclusions()
        Deprecated.
        Replaced internally with InMemoryValueGenerationStrategy / InDatabaseValueGenerationStrategy
        Which of the properties of this class are database generated values on update?
      • getPropertyUpdateability

        boolean[] getPropertyUpdateability()
        Get the "updateability" of the properties of this class (does the property appear in an SQL UPDATE)
      • getPropertyCheckability

        boolean[] getPropertyCheckability()
        Get the "checkability" of the properties of this class (is the property dirty checked, does the cache need to be updated)
      • getPropertyNullability

        boolean[] getPropertyNullability()
        Get the nullability of the properties of this class
      • getPropertyVersionability

        boolean[] getPropertyVersionability()
        Get the "versionability" of the properties of this class (is the property optimistic-locked)
      • getPropertyLaziness

        boolean[] getPropertyLaziness()
      • getPropertyCascadeStyles

        CascadeStyle[] getPropertyCascadeStyles()
        Get the cascade styles of the properties (optional operation)
      • getIdentifierType

        Type getIdentifierType()
        Get the identifier type
      • getIdentifierPropertyName

        java.lang.String getIdentifierPropertyName()
        Get the name of the identifier property (or return null) - need not return the name of an actual Java property
      • isCacheInvalidationRequired

        boolean isCacheInvalidationRequired()
        Should we always invalidate the cache instead of recaching updated state
      • isLazyPropertiesCacheable

        boolean isLazyPropertiesCacheable()
        Should lazy properties of this entity be cached?
      • canReadFromCache

        boolean canReadFromCache()
      • canWriteToCache

        boolean canWriteToCache()
      • getCacheAccessStrategy

        EntityDataAccess getCacheAccessStrategy()
        Get the cache (optional operation)
      • hasNaturalIdCache

        boolean hasNaturalIdCache()
        Does this class have a natural id cache
      • getNaturalIdCacheAccessStrategy

        NaturalIdDataAccess getNaturalIdCacheAccessStrategy()
        Get the NaturalId cache (optional operation)
      • getClassMetadata

        ClassMetadata getClassMetadata()
        Get the user-visible metadata for the class (optional operation)
      • isBatchLoadable

        boolean isBatchLoadable()
        Is batch loading enabled?
      • isSelectBeforeUpdateRequired

        boolean isSelectBeforeUpdateRequired()
        Is select snapshot before update enabled?
      • getIdByUniqueKey

        java.io.Serializable getIdByUniqueKey​(java.io.Serializable key,
                                              java.lang.String uniquePropertyName,
                                              SharedSessionContractImplementor session)
      • getCurrentVersion

        java.lang.Object getCurrentVersion​(java.io.Serializable id,
                                           SharedSessionContractImplementor session)
                                    throws HibernateException
        Get the current version of the object, or return null if there is no row for the given identifier. In the case of unversioned data, return any object if the row exists.
        Throws:
        HibernateException
      • isInstrumented

        boolean isInstrumented()
        Has the class actually been bytecode instrumented?
      • hasInsertGeneratedProperties

        boolean hasInsertGeneratedProperties()
        Does this entity define any properties as being database generated on insert?
        Returns:
        True if this entity contains at least one property defined as generated (including version property, but not identifier).
      • hasUpdateGeneratedProperties

        boolean hasUpdateGeneratedProperties()
        Does this entity define any properties as being database generated on update?
        Returns:
        True if this entity contains at least one property defined as generated (including version property, but not identifier).
      • isVersionPropertyGenerated

        boolean isVersionPropertyGenerated()
        Does this entity contain a version property that is defined to be database generated?
        Returns:
        true if this entity contains a version property and that property has been marked as generated.
      • afterInitialize

        void afterInitialize​(java.lang.Object entity,
                             SharedSessionContractImplementor session)
        Called just after the entities properties have been initialized
      • afterReassociate

        void afterReassociate​(java.lang.Object entity,
                              SharedSessionContractImplementor session)
        Called just after the entity has been reassociated with the session
      • processInsertGeneratedProperties

        void processInsertGeneratedProperties​(java.io.Serializable id,
                                              java.lang.Object entity,
                                              java.lang.Object[] state,
                                              SharedSessionContractImplementor session)
        Perform a select to retrieve the values of any generated properties back from the database, injecting these generated values into the given entity as well as writing this state to the PersistenceContext.

        Note, that because we update the PersistenceContext here, callers need to take care that they have already written the initial snapshot to the PersistenceContext before calling this method.

        Parameters:
        id - The entity's id value.
        entity - The entity for which to get the state.
        state -
        session - The session
      • processUpdateGeneratedProperties

        void processUpdateGeneratedProperties​(java.io.Serializable id,
                                              java.lang.Object entity,
                                              java.lang.Object[] state,
                                              SharedSessionContractImplementor session)
        Perform a select to retrieve the values of any generated properties back from the database, injecting these generated values into the given entity as well as writing this state to the PersistenceContext.

        Note, that because we update the PersistenceContext here, callers need to take care that they have already written the initial snapshot to the PersistenceContext before calling this method.

        Parameters:
        id - The entity's id value.
        entity - The entity for which to get the state.
        state -
        session - The session
      • getMappedClass

        java.lang.Class getMappedClass()
        The persistent class, or null
      • implementsLifecycle

        boolean implementsLifecycle()
        Does the class implement the Lifecycle interface.
      • getConcreteProxyClass

        java.lang.Class getConcreteProxyClass()
        Get the proxy interface that instances of this concrete class will be cast to (optional operation).
      • setPropertyValues

        void setPropertyValues​(java.lang.Object object,
                               java.lang.Object[] values)
        Set the given values to the mapped properties of the given object
      • setPropertyValue

        void setPropertyValue​(java.lang.Object object,
                              int i,
                              java.lang.Object value)
        Set the value of a particular property
      • getPropertyValues

        java.lang.Object[] getPropertyValues​(java.lang.Object object)
        Return the (loaded) values of the mapped properties of the object (not including backrefs)
      • getPropertyValue

        java.lang.Object getPropertyValue​(java.lang.Object object,
                                          int i)
                                   throws HibernateException
        Get the value of a particular property
        Throws:
        HibernateException
      • getPropertyValue

        java.lang.Object getPropertyValue​(java.lang.Object object,
                                          java.lang.String propertyName)
        Get the value of a particular property
      • getIdentifier

        java.io.Serializable getIdentifier​(java.lang.Object entity,
                                           SharedSessionContractImplementor session)
        Get the identifier of an instance (throw an exception if no identifier property)
        Parameters:
        entity - The entity for which to get the identifier
        session - The session from which the request originated
        Returns:
        The identifier
      • setIdentifier

        void setIdentifier​(java.lang.Object entity,
                           java.io.Serializable id,
                           SharedSessionContractImplementor session)
        Inject the identifier value into the given entity.
        Parameters:
        entity - The entity to inject with the identifier value.
        id - The value to be injected as the identifier.
        session - The session from which is requests originates
      • getVersion

        java.lang.Object getVersion​(java.lang.Object object)
                             throws HibernateException
        Get the version number (or timestamp) from the object's version property (or return null if not versioned)
        Throws:
        HibernateException
      • instantiate

        java.lang.Object instantiate​(java.io.Serializable id,
                                     SharedSessionContractImplementor session)
        Create a class instance initialized with the given identifier
        Parameters:
        id - The identifier value to use (may be null to represent no value)
        session - The session from which the request originated.
        Returns:
        The instantiated entity.
      • isInstance

        boolean isInstance​(java.lang.Object object)
        Is the given object an instance of this entity?
      • hasUninitializedLazyProperties

        boolean hasUninitializedLazyProperties​(java.lang.Object object)
        Does the given instance have any uninitialized lazy properties?
      • resetIdentifier

        void resetIdentifier​(java.lang.Object entity,
                             java.io.Serializable currentId,
                             java.lang.Object currentVersion,
                             SharedSessionContractImplementor session)
        Set the identifier and version of the given instance back to its "unsaved" value.
        Parameters:
        entity - The entity instance
        currentId - The currently assigned identifier value.
        currentVersion - The currently assigned version value.
        session - The session from which the request originated.
      • getSubclassEntityPersister

        EntityPersister getSubclassEntityPersister​(java.lang.Object instance,
                                                   SessionFactoryImplementor factory)
        A request has already identified the entity-name of this persister as the mapping for the given instance. However, we still need to account for possible subclassing and potentially re-route to the more appropriate persister.

        For example, a request names Animal as the entity-name which gets resolved to this persister. But the actual instance is really an instance of Cat which is a subclass of Animal. So, here the Animal persister is being asked to return the persister specific to Cat.

        It is also possible that the instance is actually an Animal instance in the above example in which case we would return this from this method.

        Parameters:
        instance - The entity instance
        factory - Reference to the SessionFactory
        Returns:
        The appropriate persister
        Throws:
        HibernateException - Indicates that instance was deemed to not be a subclass of the entity mapped by this persister.
      • getFilterAliasGenerator

        org.hibernate.internal.FilterAliasGenerator getFilterAliasGenerator​(java.lang.String rootAlias)
      • resolveAttributeIndexes

        int[] resolveAttributeIndexes​(java.lang.String[] attributeNames)
        Converts an array of attribute names to a set of indexes, according to the entity metamodel
        Parameters:
        attributeNames - Array of names to be resolved
        Returns:
        A set of unique indexes of the attribute names found in the metamodel
      • resolveDirtyAttributeIndexes

        default int[] resolveDirtyAttributeIndexes​(java.lang.Object[] values,
                                                   java.lang.Object[] loadedState,
                                                   java.lang.String[] attributeNames,
                                                   SessionImplementor session)
        Like resolveAttributeIndexes(String[]) but also always returns mutable attributes
        Parameters:
        values -
        loadedState -
        attributeNames - Array of names to be resolved
        session -
        Returns:
        A set of unique indexes of the attribute names found in the metamodel
      • canUseReferenceCacheEntries

        boolean canUseReferenceCacheEntries()
      • canIdentityInsertBeDelayed

        @Deprecated
        default boolean canIdentityInsertBeDelayed()
        Deprecated.
        Since 5.4.1, this is no longer used.