Package org.hibernate.engine

Examples of org.hibernate.engine.EntityEntry


    SessionImplementor session = event.getSession();
    Object old = session.getEntityUsingInterceptor( keyToLoad );

    if ( old != null ) {
      // this object was already loaded
      EntityEntry oldEntry = session.getPersistenceContext().getEntry( old );
      if ( options.isCheckDeleted() ) {
        Status status = oldEntry.getStatus();
        if ( status == Status.DELETED || status == Status.GONE ) {
          return REMOVED_ENTITY_MARKER;
        }
      }
      if ( options.isAllowNulls() ) {
View Full Code Here


    Object existing = persistenceContext.getEntity( keyToLoad );
    if ( existing != null ) {
      // return existing object or initialized proxy (unless deleted)
      log.trace( "entity found in session cache" );
      if ( options.isCheckDeleted() ) {
        EntityEntry entry = persistenceContext.getEntry( existing );
        Status status = entry.getStatus();
        if ( status == Status.DELETED || status == Status.GONE ) {
          return null;
        }
      }
      return existing;
View Full Code Here

    SessionImplementor session = event.getSession();
    Object old = session.getEntityUsingInterceptor( keyToLoad );

    if ( old != null ) {
      // this object was already loaded
      EntityEntry oldEntry = session.getPersistenceContext().getEntry( old );
      if ( options.isCheckDeleted() ) {
        Status status = oldEntry.getStatus();
        if ( status == Status.DELETED || status == Status.GONE ) {
          return REMOVED_ENTITY_MARKER;
        }
      }
      if ( options.isAllowNulls() ) {
View Full Code Here

   * Flushes a single entity's state to the database, by scheduling
   * an update action, if necessary
   */
  public void onFlushEntity(FlushEntityEvent event) throws HibernateException {
    final Object entity = event.getEntity();
    final EntityEntry entry = event.getEntityEntry();
    final EventSource session = event.getSession();
    final EntityPersister persister = entry.getPersister();
    final Status status = entry.getStatus();
    final EntityMode entityMode = session.getEntityMode();
    final Type[] types = persister.getPropertyTypes();

    final boolean mightBeDirty = entry.requiresDirtyCheck(entity);

    final Object[] values = getValues( entity, entry, entityMode, mightBeDirty, session );

    event.setPropertyValues(values);

View Full Code Here

   * @param session The session from which the request is originating.
   * @return The collection owner's key
   */
  public Serializable getKeyOfOwner(Object owner, SessionImplementor session) {
   
    EntityEntry entityEntry = session.getPersistenceContext().getEntry( owner );
    if ( entityEntry == null ) return null; // This just handles a particular case of component
                    // projection, perhaps get rid of it and throw an exception
   
    if ( foreignKeyPropertyName == null ) {
      return entityEntry.getId();
    }
    else {
      // TODO: at the point where we are resolving collection references, we don't
      // know if the uk value has been resolved (depends if it was earlier or
      // later in the mapping document) - now, we could try and use e.getStatus()
      // to decide to semiResolve(), trouble is that initializeEntity() reuses
      // the same array for resolved and hydrated values
      Object id;
      if ( entityEntry.getLoadedState() != null ) {
        id = entityEntry.getLoadedValue( foreignKeyPropertyName );
      }
      else {
        id = entityEntry.getPersister().getPropertyValue( owner, foreignKeyPropertyName, session.getEntityMode() );
      }

      // NOTE VERY HACKISH WORKAROUND!!
      // TODO: Fix this so it will work for non-POJO entity mode
      Type keyType = getPersister( session ).getKeyType();
      if ( !keyType.getReturnedClass().isInstance( id ) ) {
        id = (Serializable) keyType.semiResolve(
            entityEntry.getLoadedValue( foreignKeyPropertyName ),
            session,
            owner
          );
      }

View Full Code Here

public class DefaultSaveEventListener extends DefaultSaveOrUpdateEventListener {

  protected Serializable performSaveOrUpdate(SaveOrUpdateEvent event) {
    // this implementation is supposed to tolerate incorrect unsaved-value
    // mappings, for the purpose of backward-compatibility
    EntityEntry entry = event.getSession().getPersistenceContext().getEntry( event.getEntity() );
    if ( entry!=null && entry.getStatus() != Status.DELETED ) {
      return entityIsPersistent(event);
    }
    else {
      return entityIsTransient(event);
    }
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(null, object); //refresh() does not pass an entityName
      id = persister.getIdentifier( object, event.getSession().getEntityMode() );
      if ( log.isTraceEnabled() ) {
        log.trace(
            "refreshing transient " +
            MessageHelper.infoString( persister, id, source.getFactory() )
          );
      }
      EntityKey key = new EntityKey( id, persister, source.getEntityMode() );
      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.trace(
            "refreshing " +
            MessageHelper.infoString( e.getPersister(), e.getId(), source.getFactory()  )
          );
      }
      if ( !e.isExistsInDatabase() ) {
        throw new HibernateException( "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(CascadingAction.REFRESH, Cascade.BEFORE_REFRESH, source)
View Full Code Here

        values,
        source
    );
    Object version = Versioning.getVersion( values, persister );

    EntityEntry newEntry = source.getPersistenceContext().addEntity(
        object,
        Status.MANAGED,
        values,
        key,
        version,
View Full Code Here

      Object entity = mapEntry.getKey();
      Object copy = mapEntry.getValue();
      if ( copy instanceof HibernateProxy ) {
        copy = ( (HibernateProxy) copy ).getHibernateLazyInitializer().getImplementation();
      }
      EntityEntry copyEntry = event.getSession().getPersistenceContext().getEntry( copy );
      if ( copyEntry == null ) {
        // entity name will not be available for non-POJO entities
        // TODO: cache the entity name somewhere so that it is available to this exception
        log.trace( "transient instance could not be processed by merge: " +
            event.getSession().guessEntityName( copy ) + "[" + entity + "]" );
        throw new TransientObjectException(
          "object is an unsaved transient instance - save the transient instance before merging: " +
            event.getSession().guessEntityName( copy )
        );
      }
      else if ( copyEntry.getStatus() == Status.SAVING ) {
        transientCopyCache.put( entity, copy, copyCache.isOperatedOn( entity ) );
      }
      else if ( copyEntry.getStatus() != Status.MANAGED && copyEntry.getStatus() != Status.READ_ONLY ) {
        throw new AssertionFailure( "Merged entity does not have status set to MANAGED or READ_ONLY; "+copy+" status="+copyEntry.getStatus() );
      }
    }
    return transientCopyCache;
  }
View Full Code Here

    // For now, just run through the transient entities and retry the merge
    for ( Iterator it=transientCopyCache.entrySet().iterator(); it.hasNext(); ) {
      Map.Entry mapEntry = ( Map.Entry ) it.next();
      Object entity = mapEntry.getKey();
      Object copy = transientCopyCache.get( entity );
      EntityEntry copyEntry = event.getSession().getPersistenceContext().getEntry( copy );
      if ( entity == event.getEntity() ) {
        mergeTransientEntity( entity, copyEntry.getEntityName(), event.getRequestedId(), event.getSession(), copyCache);
      }
      else {
        mergeTransientEntity( entity, copyEntry.getEntityName(), copyEntry.getId(), event.getSession(), copyCache);
      }
    }
  }
View Full Code Here

TOP

Related Classes of org.hibernate.engine.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.