/*
 * 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 <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */
package org.hibernate.engine.internal;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;

import org.hibernate.AssertionFailure;
import org.hibernate.EntityMode;
import org.hibernate.LockMode;
import org.hibernate.UnsupportedLockAttemptException;
import org.hibernate.engine.spi.EntityEntry;
import org.hibernate.engine.spi.PersistenceContext;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.engine.spi.Status;
import org.hibernate.persister.entity.EntityPersister;

An EntityEntry implementation for immutable entities. Note that this implementation is not completely immutable in terms of its internal state; the term immutable here refers to the entity is describes.
Author:Gavin King, Emmanuel Bernard , Gunnar Morling, Sanne Grinovero
See Also:
/** * An EntityEntry implementation for immutable entities. Note that this implementation is not completely * immutable in terms of its internal state; the term immutable here refers to the entity is describes. * * @author Gavin King * @author Emmanuel Bernard <emmanuel@hibernate.org> * @author Gunnar Morling * @author Sanne Grinovero <sanne@hibernate.org> * * @see org.hibernate.annotations.Immutable */
public final class ImmutableEntityEntry extends AbstractEntityEntry {
Deprecated:the tenantId and entityMode parameters where removed: this constructor accepts but ignores them. Use the other constructor!
/** * @deprecated the tenantId and entityMode parameters where removed: this constructor accepts but ignores them. * Use the other constructor! */
@Deprecated public ImmutableEntityEntry( final Status status, final Object[] loadedState, final Object rowId, final Serializable id, final Object version, final LockMode lockMode, final boolean existsInDatabase, final EntityPersister persister, final EntityMode entityMode, final String tenantId, final boolean disableVersionIncrement, final PersistenceContext persistenceContext) { this( status, loadedState, rowId, id, version, lockMode, existsInDatabase, persister, disableVersionIncrement, // purposefully do not pass along the session/persistence-context : HHH-10251 null ); } public ImmutableEntityEntry( final Status status, final Object[] loadedState, final Object rowId, final Serializable id, final Object version, final LockMode lockMode, final boolean existsInDatabase, final EntityPersister persister, final boolean disableVersionIncrement, final PersistenceContext persistenceContext) { super( status, loadedState, rowId, id, version, lockMode, existsInDatabase, persister, disableVersionIncrement, // purposefully do not pass along the session/persistence-context : HHH-10251 null ); }
This for is used during custom deserialization handling
/** * This for is used during custom deserialization handling */
@SuppressWarnings( {"JavaDoc"}) private ImmutableEntityEntry( final SessionFactoryImplementor factory, final String entityName, final Serializable id, final Status status, final Status previousStatus, final Object[] loadedState, final Object[] deletedState, final Object version, final LockMode lockMode, final boolean existsInDatabase, final boolean isBeingReplicated, final PersistenceContext persistenceContext) { super( factory, entityName, id, status, previousStatus, loadedState, deletedState, version, lockMode, existsInDatabase, isBeingReplicated, persistenceContext ); } @Override public void setLockMode(LockMode lockMode) { switch ( lockMode ) { case NONE: case READ: { setCompressedValue( EnumState.LOCK_MODE, lockMode ); break; } default: { throw new UnsupportedLockAttemptException( "Lock mode not supported" ); } } }
Custom deserialization routine used during deserialization of a Session/PersistenceContext for increased performance.
Params:
  • ois – The stream from which to read the entry.
  • persistenceContext – The context being deserialized.
Throws:
Returns:The deserialized EntityEntry
/** * Custom deserialization routine used during deserialization of a * Session/PersistenceContext for increased performance. * * @param ois The stream from which to read the entry. * @param persistenceContext The context being deserialized. * * @return The deserialized EntityEntry * * @throws java.io.IOException If a stream error occurs * @throws ClassNotFoundException If any of the classes declared in the stream * cannot be found */
public static EntityEntry deserialize( ObjectInputStream ois, PersistenceContext persistenceContext) throws IOException, ClassNotFoundException { String previousStatusString; return new ImmutableEntityEntry( persistenceContext.getSession().getFactory(), (String) ois.readObject(), (Serializable) ois.readObject(), Status.valueOf( (String) ois.readObject() ), ( previousStatusString = (String) ois.readObject() ).length() == 0 ? null : Status.valueOf( previousStatusString ), (Object[]) ois.readObject(), (Object[]) ois.readObject(), ois.readObject(), LockMode.valueOf( (String) ois.readObject() ), ois.readBoolean(), ois.readBoolean(), null ); } @Override public PersistenceContext getPersistenceContext() { throw new AssertionFailure( "Session/PersistenceContext is not available from an ImmutableEntityEntry" ); } }