org.hibernate.engine.spi.EntityEntry Maven / Gradle / Ivy
                 Go to download
                
        
                    Show more of this group  Show more artifacts with this name
Show all versions of hibernate-core Show documentation
                Show all versions of hibernate-core Show documentation
The core O/RM functionality as provided by Hibernate
                
             The newest version!
        
        /*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or .
 */
package org.hibernate.engine.spi;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import org.hibernate.LockMode;
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.persister.entity.EntityPersister;
/**
 * We need an entry to tell us all about the current state of an object with respect to its persistent state
 *
 * Implementation Warning: Hibernate needs to instantiate a high amount of instances of this class,
 * therefore we need to take care of its impact on memory consumption.
 *
 * @author Gavin King
 * @author Emmanuel Bernard 
 * @author Gunnar Morling
 * @author Sanne Grinovero  
 */
public interface EntityEntry {
	LockMode getLockMode();
	void setLockMode(LockMode lockMode);
	Status getStatus();
	void setStatus(Status status);
	Serializable getId();
	Object[] getLoadedState();
	Object getLoadedValue(String propertyName);
	void overwriteLoadedStateCollectionValue(String propertyName, PersistentCollection collection);
	Object[] getDeletedState();
	void setDeletedState(Object[] deletedState);
	boolean isExistsInDatabase();
	Object getVersion();
	EntityPersister getPersister();
	/**
	 * Get the EntityKey based on this EntityEntry.
	 * @return the EntityKey
	 * @throws  IllegalStateException if getId() is null
	 */
	EntityKey getEntityKey();
	String getEntityName();
	boolean isBeingReplicated();
	Object getRowId();
	/**
	 * Handle updating the internal state of the entry after actually performing
	 * the database update.  Specifically we update the snapshot information and
	 * escalate the lock mode
	 *
	 * @param entity The entity instance
	 * @param updatedState The state calculated after the update (becomes the
	 * new {@link #getLoadedState() loaded state}.
	 * @param nextVersion The new version.
	 */
	void postUpdate(Object entity, Object[] updatedState, Object nextVersion);
	/**
	 * After actually deleting a row, record the fact that the instance no longer
	 * exists in the database
	 */
	void postDelete();
	/**
	 * After actually inserting a row, record the fact that the instance exists on the
	 * database (needed for identity-column key generation)
	 */
	void postInsert(Object[] insertedState);
	boolean isNullifiable(boolean earlyInsert, SessionImplementor session);
	/**
	 * Not sure this is the best method name, but the general idea here is to return {@code true} if the entity can
	 * possibly be dirty.  This can only be the case if it is in a modifiable state (not read-only/deleted) and it
	 * either has mutable properties or field-interception is not telling us it is dirty.  Clear as mud? :/
	 *
	 * A name like canPossiblyBeDirty might be better
	 *
	 * @param entity The entity to test
	 *
	 * @return {@code true} indicates that the entity could possibly be dirty and that dirty check
	 * should happen; {@code false} indicates there is no way the entity can be dirty
	 */
	boolean requiresDirtyCheck(Object entity);
	/**
	 * Can the entity be modified?
	 *
	 * The entity is modifiable if all of the following are true:
	 * 
	 * - the entity class is mutable
 
	 * - the entity is not read-only
 
	 * - if the current status is Status.DELETED, then the entity was not read-only when it was deleted
 
	 * 
	 * @return true, if the entity is modifiable; false, otherwise,
	 */
	boolean isModifiableEntity();
	void forceLocked(Object entity, Object nextVersion);
	boolean isReadOnly();
	void setReadOnly(boolean readOnly, Object entity);
	@Override
	String toString();
	boolean isLoadedWithLazyPropertiesUnfetched();
	/**
	 * Custom serialization routine used during serialization of a
	 * Session/PersistenceContext for increased performance.
	 *
	 * @param oos The stream to which we should write the serial data.
	 *
	 * @throws java.io.IOException If a stream error occurs
	 */
	void serialize(ObjectOutputStream oos) throws IOException;
	//the following methods are handling extraState contracts.
	//they are not shared by a common superclass to avoid alignment padding
	//we are trading off duplication for padding efficiency
	void addExtraState(EntityEntryExtraState extraState);
	 T getExtraState(Class extraStateType);
}
         © 2015 - 2025 Weber Informatics LLC | Privacy Policy