Package org.hibernate.persister.entity

Examples of org.hibernate.persister.entity.EntityPersister


  public Object[] getState() {
    return state;
  }

  public void execute() throws HibernateException {
    EntityPersister persister = getPersister();
    SessionImplementor session = getSession();
    Object instance = getInstance();
    Serializable id = getId();

    boolean veto = preInsert();

    // Don't need to lock the cache here, since if someone
    // else inserted the same pk first, the insert would fail

    if ( !veto ) {
     
      persister.insert( id, state, instance, session );
   
      EntityEntry entry = session.getPersistenceContext().getEntry( instance );
      if ( entry == null ) {
        throw new AssertionFailure( "possible nonthreadsafe access to session" );
      }
     
      entry.postInsert();
 
      if ( persister.hasInsertGeneratedProperties() ) {
        persister.processInsertGeneratedProperties( id, instance, state, session );
        if ( persister.isVersionPropertyGenerated() ) {
          version = Versioning.getVersion(state, persister);
        }
        entry.postUpdate(instance, state, version);
      }
     
    }

    final SessionFactoryImplementor factory = getSession().getFactory();

    if ( isCachePutEnabled( persister, session ) ) {
     
      CacheEntry ce = new CacheEntry(
          state,
          persister,
          persister.hasUninitializedLazyProperties( instance, session.getEntityMode() ),
          version,
          session,
          instance
        );
     
      cacheEntry = persister.getCacheEntryStructure().structure(ce);
      final CacheKey ck = new CacheKey(
          id,
          persister.getIdentifierType(),
          persister.getRootEntityName(),
          session.getEntityMode(),
          session.getFactory()
        );
//      boolean put = persister.getCache().insert(ck, cacheEntry);
      boolean put = persister.getCacheAccessStrategy().insert( ck, cacheEntry, version );
     
      if ( put && factory.getStatistics().isStatisticsEnabled() ) {
        factory.getStatisticsImplementor().secondLevelCachePut( getPersister().getCacheAccessStrategy().getRegion().getName() );
      }
     
View Full Code Here


    return veto;
  }

  //Make 100% certain that this is called before any subsequent ScheduledUpdate.afterTransactionCompletion()!!
  public void afterTransactionCompletion(boolean success) throws HibernateException {
    EntityPersister persister = getPersister();
    if ( success && isCachePutEnabled( persister, getSession() ) ) {
      final CacheKey ck = new CacheKey(
          getId(),
          persister.getIdentifierType(),
          persister.getRootEntityName(),
          getSession().getEntityMode(),
          getSession().getFactory()
        );
      boolean put = persister.getCacheAccessStrategy().afterInsert( ck, cacheEntry, version );
     
      if ( put && getSession().getFactory().getStatistics().isStatisticsEnabled() ) {
        getSession().getFactory().getStatisticsImplementor()
            .secondLevelCachePut( getPersister().getCacheAccessStrategy().getRegion().getName() );
      }
View Full Code Here

   * @param li The proxy initializer.
   * @param proxy The proxy to reassociate.
   */
  private void reassociateProxy(LazyInitializer li, HibernateProxy proxy) {
    if ( li.getSession() != this.getSession() ) {
      EntityPersister persister = session.getFactory().getEntityPersister( li.getEntityName() );
      EntityKey key = new EntityKey( li.getIdentifier(), persister, session.getEntityMode() );
        // any earlier proxy takes precedence
      if ( !proxiesByKey.containsKey( key ) ) {
        proxiesByKey.put( key, proxy );
      }
View Full Code Here

   * argument (the entity associated with the key) if no proxy exists.
   * (slower than the form above)
   */
  public Object proxyFor(Object impl) throws HibernateException {
    EntityEntry e = getEntry(impl);
    EntityPersister p = e.getPersister();
    return proxyFor( p, new EntityKey( e.getId(), p, session.getEntityMode() ), impl );
  }
View Full Code Here

   * @return The id of the entityName instance which is said to own the child; null if an appropriate owner not
   * located.
   */
  public Serializable getOwnerId(String entityName, String propertyName, Object childEntity, Map mergeMap) {
    final String collectionRole = entityName + '.' + propertyName;
    final EntityPersister persister = session.getFactory().getEntityPersister( entityName );
    final CollectionPersister collectionPersister = session.getFactory().getCollectionPersister( collectionRole );

    // iterate all the entities currently associated with the persistence context.
    Iterator entities = entityEntries.entrySet().iterator();
    while ( entities.hasNext() ) {
      final Map.Entry me = ( Map.Entry ) entities.next();
      final EntityEntry 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
          Object unmergedInstance = mergeMap.get( entityEntryInstance );
          Object unmergedChild = mergeMap.get( childEntity );
          if ( unmergedInstance != null && unmergedChild != null ) {
            found = isFoundInParent(
                propertyName,
                unmergedChild,
                persister,
                collectionPersister,
                unmergedInstance
            );
          }
        }

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

      }
    }

    // if we get here, it is possible that we have a proxy 'in the way' of the merge map resolution...
    //     NOTE: decided to put this here rather than in the above loop as I was nervous about the performance
    //    of the loop-in-loop especially considering this is far more likely the 'edge case'
    if ( mergeMap != null ) {
      Iterator mergeMapItr = mergeMap.entrySet().iterator();
      while ( mergeMapItr.hasNext() ) {
        final Map.Entry mergeMapEntry = ( Map.Entry ) mergeMapItr.next();
        if ( mergeMapEntry.getKey() instanceof HibernateProxy ) {
          final HibernateProxy proxy = ( HibernateProxy ) mergeMapEntry.getKey();
          if ( persister.isSubclassEntityName( proxy.getHibernateLazyInitializer().getEntityName() ) ) {
            boolean found = isFoundInParent(
                propertyName,
                childEntity,
                persister,
                collectionPersister,
View Full Code Here

   * Search the persistence context for an index of the child object,
   * given a collection role
   */
  public Object getIndexInOwner(String entity, String property, Object childEntity, Map mergeMap) {

    EntityPersister persister = session.getFactory()
        .getEntityPersister(entity);
    CollectionPersister cp = session.getFactory()
        .getCollectionPersister(entity + '.' + property);
    Iterator entities = entityEntries.entrySet().iterator();
    while ( entities.hasNext() ) {
      Map.Entry me = (Map.Entry) entities.next();
      EntityEntry ee = (EntityEntry) me.getValue();
      if ( persister.isSubclassEntityName( ee.getEntityName() ) ) {
        Object instance = me.getKey();
       
        Object index = getIndexInParent(property, childEntity, persister, cp, instance);
       
        if (index==null && mergeMap!=null) {
View Full Code Here

        // 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.getEntityMode() );
          if ( id != null ) {
            EntityKey key = new EntityKey( id, persister, source.getEntityMode() );
            Object managedEntity = source.getPersistenceContext().getEntity( key );
            entry = source.getPersistenceContext().getEntry( managedEntity );
            if ( entry != null ) {
View Full Code Here

   
    //TODO: check that entry.getIdentifier().equals(requestedId)
   
    final Object entity = event.getEntity();
    final EventSource source = event.getSession();
    final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity );
   
    copyCache.put(entity, entity); //before cascade!
   
    cascadeOnMerge(source, persister, entity, copyCache);
    copyValues(persister, entity, entity, source, copyCache);
View Full Code Here

    log.trace("merging transient instance");
   
    final Object entity = event.getEntity();
    final EventSource source = event.getSession();

    final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity );
    final String entityName = persister.getEntityName();
   
    final Serializable id = persister.hasIdentifierProperty() ?
        persister.getIdentifier( entity, source.getEntityMode() ) :
            null;

    final Object copy = persister.instantiate( id, source.getEntityMode() )//TODO: should this be Session.instantiate(Persister, ...)?
    copyCache.put(entity, copy); //before cascade!
   
    // cascade first, so that all unsaved objects get their
    // copy created before we actually copy
    //cascadeOnMerge(event, persister, entity, copyCache, Cascades.CASCADE_BEFORE_MERGE);
View Full Code Here

    log.trace("merging detached instance");
   
    final Object entity = event.getEntity();
    final EventSource source = event.getSession();

    final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity );
    final String entityName = persister.getEntityName();
     
    Serializable id = event.getRequestedId();
    if ( id == null ) {
      id = persister.getIdentifier( entity, source.getEntityMode() );
    }
    else {
      // check that entity id = requestedId
      Serializable entityId = persister.getIdentifier( entity, source.getEntityMode() );
      if ( !persister.getIdentifierType().isEqual( id, entityId, source.getEntityMode(), source.getFactory() ) ) {
        throw new HibernateException( "merge requested with id not matching id of passed entity" );
      }
    }
   
    String previousFetchProfile = source.getFetchProfile();
    source.setFetchProfile("merge");
    //we must clone embedded composite identifiers, or
    //we will get back the same instance that we pass in
    final Serializable clonedIdentifier = (Serializable) persister.getIdentifierType()
        .deepCopy( id, source.getEntityMode(), source.getFactory() );
    final Object result = source.get(entityName, clonedIdentifier);
    source.setFetchProfile(previousFetchProfile);
   
    if ( result == null ) {
View Full Code Here

TOP

Related Classes of org.hibernate.persister.entity.EntityPersister

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.