Package org.hibernate.ogm.util.impl

Examples of org.hibernate.ogm.util.impl.PropertyMetadataProvider


      //collection persister
      if ( getCollectionPersisters().length != 1 ) {
        throw new AssertionFailure( "Found an unexpected number of collection persisters: " + getCollectionPersisters().length );
      }
      final OgmCollectionPersister persister = (OgmCollectionPersister) getCollectionPersisters()[0];
      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect(gridDialect)
        .tableName(persister.getTableName())
        .key( id )
        .keyColumnNames( persister.getKeyColumnNames() )
        .keyGridType( persister.getKeyGridType() )
        .collectionPersister( persister )
        .session( session );
      Association assoc = metadataProvider.getCollectionMetadataOrNull();
      if ( assoc != null ) {
        for ( RowKey rowKey : assoc.getKeys() ) {
          resultset.addTuple( assoc.get( rowKey ) );
        }
      }
View Full Code Here


      throws HibernateException {
    if ( ArrayHelper.isAllFalse( elementColumnIsSettable ) ) return 0;
    int count = 0;
    int i = 0;
    Iterator entries = collection.entries( this );
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridManager( gridManager )
        .tableName( getTableName() )
        .key( key )
        .keyColumnNames( getKeyColumnNames() )
        .keyGridType( getKeyGridType() )
        .session( session );

    while ( entries.hasNext() ) {
      Object entry = entries.next();
      if ( collection.needsUpdating( entry, i, elementType ) ) {
        //get the tuple Key
        Map<String, Object> tupleKey = getTupleKeyForUpdate( key, collection, session, i, entry );

        //find the matching element
        RowKey matchingTupleKey = metadataProvider.findMatchingTuple( tupleKey );
        if ( matchingTupleKey == null ) {
          throw new AssertionFailure( "Updating a collection tuple that is not present: " +
              "table {" + getTableName() + "} collectionKey {" + key + "} entry {" + entry + "}" );
        }
        //copy on read to avoid concurrent transactions issues
        Map<String,Object> matchingTuple = new HashMap<String, Object>();
        matchingTuple.putAll( metadataProvider.getCollectionMetadata().get( matchingTupleKey ) );

        //update the matching element
        //FIXME update the associated entity key data
        updateInverseSideOfAssociationNavigation( session, matchingTuple, Action.REMOVE, matchingTupleKey );
        getElementGridType().nullSafeSet( matchingTuple, collection.getElement( entry ), getElementColumnNames(), session );
        updateInverseSideOfAssociationNavigation( session, matchingTuple, Action.ADD, matchingTupleKey );
        count++;
      }
      i++;
    }

    //need to put the data back in the cache
    metadataProvider.flushToCache();
    return count;
  }
View Full Code Here

      //collection persister
      if ( getCollectionPersisters().length != 1 ) {
        throw new AssertionFailure( "Found an unexpected number of collection persisters: " + getCollectionPersisters().length );
      }
      final CollectionPhysicalModel persister = (CollectionPhysicalModel) getCollectionPersisters()[0];
      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridManager( gridManager )
        .tableName( persister.getTableName() )
        .key( id )
        .keyColumnNames( persister.getKeyColumnNames() )
        .keyGridType( persister.getKeyGridType() )
        .session( session );
      final Map<RowKey,Map<String,Object>> entry = metadataProvider.getCollectionMetadataOrNull();
      if ( entry != null ) {
        for ( Map<String,Object> tuple : entry.values() ) {
          resultset.addTuple( tuple );
        }
      }
View Full Code Here



  @Override
  public int getSize(Serializable key, SessionImplementor session) {
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .key( key )
        .tableName( getTableName() )
        .session( session )
        .gridManager( gridManager )
        .tableName( getTableName() )
        .keyGridType( getKeyGridType() )
        .keyColumnNames( getKeyColumnNames() );

    final Map<RowKey,Map<String, Object>> collectionMetadata = metadataProvider.getCollectionMetadataOrNull();
    return collectionMetadata == null ? 0 : collectionMetadata.size();
  }
View Full Code Here

          );
      }

      boolean deleteByIndex = !isOneToMany() && hasIndex && !indexContainsFormula;

      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridManager( gridManager )
        .tableName( getTableName() )
        .key( id )
        .keyColumnNames( getKeyColumnNames() )
        .keyGridType( getKeyGridType() )
        .session( session );

      //delete all the deleted entries
      Iterator deletes = collection.getDeletes( this, !deleteByIndex );
      if ( deletes.hasNext() ) {
        int count = 0;
        while ( deletes.hasNext() ) {
          Object entry = deletes.next();
          final Map<String, Object> tupleKey = getTupleKeyForDelete(
              id, collection, session, entry, deleteByIndex
          );

          //find the matching element
          RowKey matchingTupleKey = metadataProvider.findMatchingTuple( tupleKey );
          if ( matchingTupleKey == null ) {
            throw new AssertionFailure( "Deleting a collection tuple that is not present: " +
                "table {" + getTableName() + "} collectionKey {" + id + "} entry {" + entry + "}" );
          }
          Map<String,Object> matchingTuple = metadataProvider.getCollectionMetadata().get( matchingTupleKey );
          //delete the tuple
          updateInverseSideOfAssociationNavigation( session, matchingTuple, Action.REMOVE, matchingTupleKey );
          metadataProvider.getCollectionMetadata().remove( matchingTupleKey );

          count++;

          if ( log.isDebugEnabled() ) {
            log.debug( "done deleting collection rows: " + count + " deleted" );
          }
        }
        metadataProvider.flushToCache();
      }
      else {
        if ( log.isDebugEnabled() ) {
          log.debug( "no rows to delete" );
        }
View Full Code Here

            "Inserting rows of collection: " +
            MessageHelper.collectionInfoString( this, id, getFactory() )
          );
      }

      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridManager( gridManager )
        .tableName( getTableName() )
        .key( id )
        .keyColumnNames( getKeyColumnNames() )
        .keyGridType( getKeyGridType() )
        .session( session );

      //insert all the new entries
      collection.preInsert( this );
      Iterator entries = collection.entries( this );
      int i = 0;
      int count = 0;
      while ( entries.hasNext() ) {
        Object entry = entries.next();
        if ( collection.needsInserting( entry, i, elementType ) ) {
          //TODO: copy/paste from recreate()
          final Map<String, Object> newTupleId = buildTupleForInsert( id, collection, session, i, entry );
          RowKey key = buildRowKey( newTupleId );
          final Map<String, Object> newTuple = completeTuple( newTupleId, collection, session, entry );
          metadataProvider.getCollectionMetadata().put( key, newTuple );
          updateInverseSideOfAssociationNavigation( session, newTuple, Action.ADD, key );
          collection.afterRowInsert( this, entry, i );
          count++;
        }
        i++;
      }
      metadataProvider.flushToCache();
      if ( log.isDebugEnabled() ) {
        log.debug( "done inserting rows: " + count + " inserted" );
      }
    }
  }
View Full Code Here

            "Inserting collection: " +
            MessageHelper.collectionInfoString( this, id, getFactory() )
          );
      }

      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridManager( gridManager )
        .tableName( getTableName() )
        .key( id )
        .keyColumnNames( getKeyColumnNames() )
        .keyGridType( getKeyGridType() )
        .session( session );

      //create all the new entries
      Iterator entries = collection.entries(this);
      if ( entries.hasNext() ) {
        collection.preInsert( this );
        int i = 0;
        int count = 0;
        while ( entries.hasNext() ) {
          final Object entry = entries.next();
          if ( collection.entryExists( entry, i ) ) {
            //TODO: copy/paste from insertRows()
            final Map<String, Object> newTupleId = buildTupleForInsert( id, collection, session, i, entry );
            RowKey key = buildRowKey( newTupleId );
            final Map<String, Object> newTuple = completeTuple( newTupleId, collection, session, entry );
            metadataProvider.getCollectionMetadata().put( key, newTuple );
            updateInverseSideOfAssociationNavigation( session, newTuple, Action.ADD, key );
            collection.afterRowInsert( this, entry, i );
            count++;
          }
          i++;
        }
        metadataProvider.flushToCache();
        if ( log.isDebugEnabled() ) {
          log.debug( "done inserting collection: " + count + " rows inserted" );
        }

      }
View Full Code Here

      gridDialect.updateTuple( entityTuple, entityKey, entityCache ); //update cache
    }
    else if ( associationType == AssociationType.ASSOCIATION_TABLE_TO_ENTITY ) {
      String[] elementColumnNames = getElementColumnNames();
      Object[] elementColumnValues = LogicalPhysicalConverterHelper.getColumnValuesFromResultset(tuple, elementColumnNames);
      PropertyMetadataProvider associationProvider = new PropertyMetadataProvider()
          .gridManager( gridManager )
          .keyColumnNames( elementColumnNames )
          .keyColumnValues( elementColumnValues )
          .session( session )
          .tableName( getTableName() );

      //TODO what happens when a row should be *updated* ?: I suspect ADD works OK as it's a put()
      if (action == Action.ADD) {
        //FIXMEbuild the key
        associationProvider.getCollectionMetadata().put( rowKey, tuple );
      }
      else if (action == Action.REMOVE) {
        //we try and match the whole tuple as it should be on both sides of the navigation
        if ( rowKey == null ) {
          throw new AssertionFailure( "Deleting a collection tuple that is not present: " +
              "table {" + getTableName() + "} key column names {" + elementColumnNames + "} key column values {" + elementColumnValues + "}" );
        }
        associationProvider.getCollectionMetadata().remove( rowKey );
      }
      else {
        throw new AssertionFailure( "Unknown action type: " + action );
      }
      associationProvider.flushToCache();
    }
  }
View Full Code Here

            MessageHelper.collectionInfoString( this, id, getFactory() )
          );
      }

      // Remove all the old entries
      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridManager( gridManager )
        .tableName( getTableName() )
        .key( id )
        .keyColumnNames( getKeyColumnNames() )
        .keyGridType( getKeyGridType() )
        .session( session );

      //shortcut to avoid loop if we can
      if (associationType != AssociationType.OTHER) {
        for ( Map.Entry<RowKey,Map<String,Object>> tupleEntry : metadataProvider.getCollectionMetadata().entrySet() ) {
          //we unfortunately cannot mass change the update of the associated entity
          updateInverseSideOfAssociationNavigation( session, tupleEntry.getValue(), Action.REMOVE, tupleEntry.getKey() );
        }
      }
      metadataProvider.getCollectionMetadata().clear();
      metadataProvider.flushToCache();

      if ( log.isDebugEnabled() ) {
        log.debug( "done deleting collection" );
      }
    }
View Full Code Here

    //we get the property type for an associated entity
    final GridType gridUniqueKeyType = getUniqueKeyTypeFromAssociatedEntity( propertyName );
    //get the associated property index (to get its column names)
    final int propertyIndex = getPropertyIndex( propertyName );
    //find the ids per unique property name
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .tableName( getTableName() )
        .gridManager( gridManager )
        .key( uniqueKey )
        .keyGridType( gridUniqueKeyType )
        .keyColumnNames( getPropertyColumnNames( propertyIndex ) )
        .session( session );
    final Map<RowKey,Map<String,Object>> ids = metadataProvider.getCollectionMetadata();

    if (ids == null || ids.size() == 0 ) {
      return null;
    }
    else if (ids.size() == 1) {
View Full Code Here

TOP

Related Classes of org.hibernate.ogm.util.impl.PropertyMetadataProvider

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.