Package org.hibernate.engine.spi

Examples of org.hibernate.engine.spi.EntityEntry


    if ( !veto ) {
     
      persister.insert( id, getState(), instance, session );

      final EntityEntry entry = session.getPersistenceContext().getEntry( instance );
      if ( entry == null ) {
        throw new AssertionFailure( "possible non-threadsafe access to session" );
      }
     
      entry.postInsert( getState() );
 
      if ( persister.hasInsertGeneratedProperties() ) {
        persister.processInsertGeneratedProperties( id, instance, getState(), session );
        if ( persister.isVersionPropertyGenerated() ) {
          version = Versioning.getVersion( getState(), persister );
        }
        entry.postUpdate( instance, getState(), version );
      }

      getSession().getPersistenceContext().registerInsertedKey( getPersister(), getId() );
    }
View Full Code Here


  public void afterDeserialize(SessionImplementor session) {
    super.afterDeserialize( session );
    // IMPL NOTE: non-flushed changes code calls this method with session == null...
    // guard against NullPointerException
    if ( session != null ) {
      final EntityEntry entityEntry = session.getPersistenceContext().getEntry( getInstance() );
      this.state = entityEntry.getLoadedState();
    }
  }
View Full Code Here

          rowId,
          session
      );
    }

    final EntityEntry entry = getSession().getPersistenceContext().getEntry( instance );
    if ( entry == null ) {
      throw new AssertionFailure( "possible nonthreadsafe access to session" );
    }
   
    if ( entry.getStatus()==Status.MANAGED || persister.isVersionPropertyGenerated() ) {
      // get the updated snapshot of the entity state by cloning current state;
      // it is safe to copy in place, since by this time no-one else (should have)
      // has a reference  to the array
      TypeHelper.deepCopy(
          state,
          persister.getPropertyTypes(),
          persister.getPropertyCheckability(),
          state,
          session
      );
      if ( persister.hasUpdateGeneratedProperties() ) {
        // this entity defines proeprty generation, so process those generated
        // values...
        persister.processUpdateGeneratedProperties( id, instance, state, session );
        if ( persister.isVersionPropertyGenerated() ) {
          nextVersion = Versioning.getVersion( state, persister );
        }
      }
      // have the entity entry doAfterTransactionCompletion post-update processing, passing it the
      // update state and the new version (if one).
      entry.postUpdate( instance, state, nextVersion );
    }

    if ( persister.hasCache() ) {
      if ( persister.isCacheInvalidationRequired() || entry.getStatus()!= Status.MANAGED ) {
        persister.getCacheAccessStrategy().remove( ck );
      }
      else {
        //TODO: inefficient if that cache is just going to ignore the updated state!
        final CacheEntry ce = persister.buildCacheEntry( instance,state, nextVersion, getSession() );
View Full Code Here

    if ( hydratedObjects != null ) {
      for ( Object hydratedObject : hydratedObjects ) {
        TwoPhaseLoad.postLoad( hydratedObject, session, post );
        if ( afterLoadActions != null ) {
          for ( AfterLoadAction afterLoadAction : afterLoadActions ) {
            final EntityEntry entityEntry = session.getPersistenceContext().getEntry( hydratedObject );
            if ( entityEntry == null ) {
              // big problem
              throw new HibernateException( "Could not locate EntityEntry immediately after two-phase load" );
            }
            afterLoadAction.afterLoad( session, hydratedObject, (Loadable) entityEntry.getPersister() );
          }
        }
      }
    }
  }
View Full Code Here

        event.setEntity( entity );
        EntityState entityState = null;

        // Check the persistence context for an entry relating to this
        // entity to be merged...
        EntityEntry entry = source.getPersistenceContext().getEntry( entity );
        if ( entry == null ) {
          EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity );
          Serializable id = persister.getIdentifier( entity, source );
          if ( id != null ) {
            final EntityKey key = source.generateEntityKey( id, persister );
View Full Code Here

    // version be equivalent to the defined unsaved-value?
    return changed && existsInDatabase( target, source, persister );
  }

  private boolean existsInDatabase(Object entity, EventSource source, EntityPersister persister) {
    EntityEntry entry = source.getPersistenceContext().getEntry( entity );
    if ( entry == null ) {
      Serializable id = persister.getIdentifier( entity, source );
      if ( id != null ) {
        final EntityKey key = source.generateEntityKey( id, persister );
        final Object managedEntity = source.getPersistenceContext().getEntity( key );
        entry = source.getPersistenceContext().getEntry( managedEntity );
      }
    }

    return entry != null && entry.isExistsInDatabase();
  }
View Full Code Here

      final boolean existsInDatabase,
      final EntityPersister persister,
      final boolean disableVersionIncrement,
      boolean lazyPropertiesAreUnfetched) {

    final EntityEntry e = new EntityEntry(
        status,
        loadedState,
        rowId,
        id,
        version,
View Full Code Here

    return ( proxy != null ) ? narrowProxy( proxy, persister, key, impl ) : impl;
  }

  @Override
  public Object proxyFor(Object impl) throws HibernateException {
    final EntityEntry e = getEntry( impl );
    return proxyFor( e.getPersister(), e.getEntityKey(), impl );
  }
View Full Code Here

   
    Object entity = source.getPersistenceContext().unproxyAndReassociate( event.getObject() );
    //TODO: if object was an uninitialized proxy, this is inefficient,
    //      resulting in two SQL selects
   
    EntityEntry entry = source.getPersistenceContext().getEntry(entity);
    if (entry==null) {
      final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity );
      final Serializable id = persister.getIdentifier( entity, source );
      if ( !ForeignKeys.isNotTransient( event.getEntityName(), entity, Boolean.FALSE, source ) ) {
        throw new TransientObjectException(
View Full Code Here

    final CollectionPersister collectionPersister = session.getFactory().getCollectionPersister( collectionRole );

      // try cache lookup first
    final Object parent = parentsByChild.get( childEntity );
    if ( parent != null ) {
      final EntityEntry entityEntry = entityEntryContext.getEntityEntry( parent );
      //there maybe more than one parent, filter by type
      if ( persister.isSubclassEntityName( entityEntry.getEntityName() )
          && isFoundInParent( propertyName, childEntity, persister, collectionPersister, parent ) ) {
        return getEntry( parent ).getId();
      }
      else {
        // remove wrong entry
        parentsByChild.remove( childEntity );
      }
    }

    //not found in case, proceed
    // iterate all the entities currently associated with the persistence context.
    for ( Entry<Object,EntityEntry> me : reentrantSafeEntityEntries() ) {
      final EntityEntry entityEntry = me.getValue();
      // does this entity entry pertain to the entity persister in which we are interested (owner)?
      if ( persister.isSubclassEntityName( entityEntry.getEntityName() ) ) {
        final Object entityEntryInstance = me.getKey();

        //check if the managed object is the parent
        boolean found = isFoundInParent(
            propertyName,
            childEntity,
            persister,
            collectionPersister,
            entityEntryInstance
        );

        if ( !found && mergeMap != null ) {
          //check if the detached object being merged is the parent
          final Object unmergedInstance = mergeMap.get( entityEntryInstance );
          final Object unmergedChild = mergeMap.get( childEntity );
          if ( unmergedInstance != null && unmergedChild != null ) {
            found = isFoundInParent(
                propertyName,
                unmergedChild,
                persister,
                collectionPersister,
                unmergedInstance
            );
          }
        }

        if ( found ) {
          return entityEntry.getId();
        }

      }
    }
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.