Package org.hibernate.engine.spi

Examples of org.hibernate.engine.spi.EntityEntry


    ManagedEntity previous = null;

    for ( int i = 0; i < count; i++ ) {
      final boolean isEnhanced = ois.readBoolean();
      final Object entity = ois.readObject();
      final EntityEntry entry = EntityEntry.deserialize( ois, rtn );
      final ManagedEntity managedEntity;
      if ( isEnhanced ) {
        managedEntity = (ManagedEntity) entity;
      }
      else {
View Full Code Here


    else {
      entityName = source.bestGuessEntityName( entity );
      event.setEntityName( entityName );
    }

    final EntityEntry entityEntry = source.getPersistenceContext().getEntry( entity );
    EntityState entityState = getEntityState( entity, entityName, entityEntry, source );
    if ( entityState == EntityState.DETACHED ) {
      // JPA 2, in its version of a "foreign generated", allows the id attribute value
      // to be manually set by the user, even though this manual value is irrelevant.
      // The issue is that this causes problems with the Hibernate unsaved-value strategy
      // which comes into play here in determining detached/transient state.
      //
      // Detect if we have this situation and if so null out the id value and calculate the
      // entity state again.

      // NOTE: entityEntry must be null to get here, so we cannot use any of its values
      EntityPersister persister = source.getFactory().getEntityPersister( entityName );
      if ( ForeignGenerator.class.isInstance( persister.getIdentifierGenerator() ) ) {
        if ( LOG.isDebugEnabled() && persister.getIdentifier( entity, source ) != null ) {
          LOG.debug( "Resetting entity id attribute to null for foreign generator" );
        }
        persister.setIdentifier( entity, null, source );
        entityState = getEntityState( entity, entityName, entityEntry, source );
      }
    }

    switch ( entityState ) {
      case DETACHED: {
        throw new PersistentObjectException(
            "detached entity passed to persist: " +
                getLoggableName( event.getEntityName(), entity )
        );
      }
      case PERSISTENT: {
        entityIsPersistent( event, createCache );
        break;
      }
      case TRANSIENT: {
        entityIsTransient( event, createCache );
        break;
      }
      case DELETED: {
        entityEntry.setStatus( Status.MANAGED );
        entityEntry.setDeletedState( null );
        event.getSession().getActionQueue().unScheduleDeletion( entityEntry, event.getObject() );
        entityIsDeleted( event, createCache );
        break;
      }
      default: {
View Full Code Here

      return getEntityEntry();
    }

    @Override
    public EntityEntry setValue(EntityEntry entityEntry) {
      final EntityEntry old = this.entityEntry;
      this.entityEntry = entityEntry;
      return old;
    }
View Full Code Here

*/
public class DefaultPostLoadEventListener implements PostLoadEventListener {
  @Override
  public void onPostLoad(PostLoadEvent event) {
    final Object entity = event.getEntity();
    final EntityEntry entry = event.getSession().getPersistenceContext().getEntry( entity );
    if ( entry == null ) {
      throw new AssertionFailure( "possible non-threadsafe access to the session" );
    }

    final LockMode lockMode = entry.getLockMode();
    if ( LockMode.PESSIMISTIC_FORCE_INCREMENT.equals( lockMode ) ) {
      final EntityPersister persister = entry.getPersister();
      final Object nextVersion = persister.forceVersionIncrement(
          entry.getId(),
          entry.getVersion(),
          event.getSession()
      );
      entry.forceLocked( entity, nextVersion );
    }
    else if ( LockMode.OPTIMISTIC_FORCE_INCREMENT.equals( lockMode ) ) {
      final EntityIncrementVersionProcess incrementVersion = new EntityIncrementVersionProcess( entity, entry );
      event.getSession().getActionQueue().registerProcess( incrementVersion );
    }
View Full Code Here

    // collect EntityIdentifier(s) of the *current* elements - add them into a HashSet for fast access
    final java.util.Set currentIds = new HashSet();
    final java.util.Set currentSaving = new IdentitySet();
    for ( Object current : currentElements ) {
      if ( current != null && ForeignKeys.isNotTransient( entityName, current, null, session ) ) {
        final EntityEntry ee = session.getPersistenceContext().getEntry( current );
        if ( ee != null && ee.getStatus() == Status.SAVING ) {
          currentSaving.add( current );
        }
        else {
          final Serializable currentId = ForeignKeys.getEntityIdentifierIfNotUnsaved(
              entityName,
View Full Code Here

    if ( refreshedAlready.containsKey( object ) ) {
      LOG.trace( "Already refreshed" );
      return;
    }

    final EntityEntry e = source.getPersistenceContext().getEntry( object );
    final EntityPersister persister;
    final Serializable id;

    if ( e == null ) {
      persister = source.getEntityPersister(
          event.getEntityName(),
          object
      ); //refresh() does not pass an entityName
      id = persister.getIdentifier( object, event.getSession() );
      if ( LOG.isTraceEnabled() ) {
        LOG.tracev(
            "Refreshing transient {0}", MessageHelper.infoString(
            persister,
            id,
            source.getFactory()
        )
        );
      }
      final EntityKey key = source.generateEntityKey( id, persister );
      if ( source.getPersistenceContext().getEntry( key ) != null ) {
        throw new PersistentObjectException(
            "attempted to refresh transient instance when persistent instance was already associated with the Session: " +
                MessageHelper.infoString( persister, id, source.getFactory() )
        );
      }
    }
    else {
      if ( LOG.isTraceEnabled() ) {
        LOG.tracev(
            "Refreshing ", MessageHelper.infoString(
            e.getPersister(),
            e.getId(),
            source.getFactory()
        )
        );
      }
      if ( !e.isExistsInDatabase() ) {
        throw new UnresolvableObjectException(
            e.getId(),
            "this instance does not yet exist as a row in the database"
        );
      }

      persister = e.getPersister();
      id = e.getId();
    }

    // cascade the refresh prior to refreshing this entity
    refreshedAlready.put( object, object );
    new Cascade( CascadingActions.REFRESH, CascadePoint.BEFORE_REFRESH, source ).cascade(
        persister,
        object,
        refreshedAlready
    );

    if ( e != null ) {
      final EntityKey key = source.generateEntityKey( id, persister );
      source.getPersistenceContext().removeEntity( key );
      if ( persister.hasCollections() ) {
        new EvictVisitor( source ).process( object, persister );
      }
    }

    if ( persister.hasCache() ) {
      final CacheKey ck = source.generateCacheKey(
          id,
          persister.getIdentifierType(),
          persister.getRootEntityName()
      );
      persister.getCacheAccessStrategy().evict( ck );
    }

    evictCachedCollections( persister, id, source.getFactory() );

    String previousFetchProfile = source.getLoadQueryInfluencers().getInternalFetchProfile();
    source.getLoadQueryInfluencers().setInternalFetchProfile( "refresh" );
    Object result = persister.load( id, object, event.getLockOptions(), source );
    // Keep the same read-only/modifiable setting for the entity that it had before refreshing;
    // If it was transient, then set it to the default for the source.
    if ( result != null ) {
      if ( !persister.isMutable() ) {
        // this is probably redundant; it should already be read-only
        source.setReadOnly( result, true );
      }
      else {
        source.setReadOnly( result, ( e == null ? source.isDefaultReadOnly() : e.isReadOnly() ) );
      }
    }
    source.getLoadQueryInfluencers().setInternalFetchProfile( previousFetchProfile );

    UnresolvableObjectException.throwIfNull( result, id, persister.getEntityName() );
View Full Code Here

      object = ( (HibernateProxy) object ).getHibernateLazyInitializer().getImplementation(this);
      if ( object == null ) {
        return LockMode.NONE;
      }
    }
    EntityEntry e = persistenceContext.getEntry(object);
    if ( e == null ) {
      throw new TransientObjectException( "Given object not associated with the session" );
    }
    if ( e.getStatus() != Status.MANAGED ) {
      throw new ObjectDeletedException(
          "The given object was deleted",
          e.getId(),
          e.getPersister().getEntityName()
        );
    }
    return e.getLockMode();
  }
View Full Code Here

        throw new TransientObjectException( "The proxy was not associated with this session" );
      }
      return li.getIdentifier();
    }
    else {
      EntityEntry entry = persistenceContext.getEntry(object);
      if ( entry == null ) {
        throw new TransientObjectException( "The instance was not associated with this session" );
      }
      return entry.getId();
    }
  }
View Full Code Here

    errorIfClosed();
    if ( object instanceof HibernateProxy ) {
      return getProxyIdentifier( object );
    }
    else {
      EntityEntry entry = persistenceContext.getEntry(object);
      return entry != null ? entry.getId() : null;
    }
  }
View Full Code Here

      }
    }
    // A session is considered to contain an entity only if the entity has
    // an entry in the session's persistence context and the entry reports
    // that the entity has not been removed
    EntityEntry entry = persistenceContext.getEntry( object );
    delayedAfterCompletion();
    return entry != null && entry.getStatus() != Status.DELETED && entry.getStatus() != Status.GONE;
  }
View Full Code Here

TOP

Related Classes of org.hibernate.engine.spi.EntityEntry

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.