Package org.hibernate.ogm.util.impl

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


  private void doAddPropertyMetadata(int tableIndex, int propertyIndex, Object[] newColumnValue) {

    String[] propertyColumnNames = persister.getPropertyColumnNames( propertyIndex );
    String[] rowKeyColumnNames = buildRowKeyColumnNamesForStarToOne( persister, propertyColumnNames );
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect( gridDialect )
        .keyColumnNames( propertyColumnNames )
        .keyColumnValues( newColumnValue )
        .session( session )
        //does not set .collectionPersister as it does not make sense here for a ToOne or a unique key
        .tableName( persister.getTableName( tableIndex ) )
        .propertyType( persister.getPropertyTypes()[propertyIndex] )
        .rowKeyColumnNames( rowKeyColumnNames );
    Tuple tuple = new Tuple( EmptyTupleSnapshot.SINGLETON );
    //add the id column
    final String[] identifierColumnNames = persister.getIdentifierColumnNames();
    gridIdentifierType.nullSafeSet( tuple, id, identifierColumnNames, session );
    //add the fk column
    gridPropertyTypes[propertyIndex].nullSafeSet(
              tuple,
              fields[propertyIndex],
              propertyColumnNames,
              includeColumns[propertyIndex],
              session
          );
    Object[] columnValues = LogicalPhysicalConverterHelper.getColumnValuesFromResultset( tuple, rowKeyColumnNames );
    final RowKey rowKey = new RowKey( persister.getTableName(), rowKeyColumnNames, columnValues );

    Tuple assocEntryTuple = metadataProvider.createAndPutAssociationTuple( rowKey );
    for ( String column : tuple.getColumnNames() ) {
      assocEntryTuple.put( column, tuple.get( column ) );
    }
    metadataProvider.flushToCache();
  }
View Full Code Here


  private void doRemovePropertyMetadata(int tableIndex,
                    int propertyIndex,
                    Object[] oldColumnValue) {
    String[] propertyColumnNames = persister.getPropertyColumnNames( propertyIndex );
    String[] rowKeyColumnNames = buildRowKeyColumnNamesForStarToOne( persister, propertyColumnNames );
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect( gridDialect )
        .keyColumnNames( propertyColumnNames )
        .keyColumnValues( oldColumnValue )
        .session( session )
        //does not set .collectionPersister as it does not make sense here for a ToOne or a unique key
        .tableName( persister.getTableName( tableIndex ) )
        .propertyType( persister.getPropertyTypes()[propertyIndex] )
        .rowKeyColumnNames( rowKeyColumnNames );
    //add fk column value in TupleKey
    Tuple tupleKey = new Tuple( EmptyTupleSnapshot.SINGLETON );
    for (int index = 0 ; index < propertyColumnNames.length ; index++) {
      tupleKey.put( propertyColumnNames[index], oldColumnValue[index] );
    }
    //add id value in TupleKey
    gridIdentifierType.nullSafeSet( tupleKey, id, persister.getIdentifierColumnNames(), session );

    Association propertyValues = metadataProvider.getCollectionMetadata();
    if ( propertyValues != null ) {
      //Map's equals operation delegates to all it's key and value, should be fine for now
      //this is a StarToOne case ie the FK is on the owning entity
      final RowKey matchingTuple = new RowKeyBuilder()
          .tableName( persister.getTableName() )
          .addColumns( buildRowKeyColumnNamesForStarToOne( persister, propertyColumnNames ) )
          .values( tupleKey )
          .build();
      //TODO what should we do if that's null?
      metadataProvider.getCollectionMetadata().remove( matchingTuple );
      metadataProvider.flushToCache();
    }
  }
View Full Code Here

      //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 )
        .key( id )
        .keyGridType( persister.getKeyGridType() )
        .collectionPersister( persister )
        .associationMetadataKey( persister.getAssociationKeyMetadata() )
        .session( session );
      Association assoc = metadataProvider.getCollectionMetadataOrNull();
      if ( assoc != null ) {
        for ( RowKey rowKey : assoc.getKeys() ) {
          resultset.addTuple( assoc.get( rowKey ) );
        }
      }
View Full Code Here

    //find the ids per unique property name
    AssociationKeyMetadata associationKeyMetadata = associationKeyMetadataPerPropertyName.get( propertyName );
    if ( associationKeyMetadata == null ) {
      throw new AssertionFailure( "loadByUniqueKey on a non EntityType:" + propertyName );
    }
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect( gridDialect )
        .key( uniqueKey )
        .keyGridType( gridUniqueKeyType )
        //does not set .collectionPersister as it does not make sense here for an entity
        .associationMetadataKey( associationKeyMetadata )
        .session( session )
        .propertyType( getPropertyTypes()[propertyIndex] );
    final Association ids = metadataProvider.getCollectionMetadataOrNull();

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

      return 0;
    }
    int count = 0;
    int i = 0;
    Iterator entries = collection.entries( this );
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect( gridDialect )
        .key( key )
        .keyGridType( getKeyGridType() )
        .associationMetadataKey( associationKeyMetadata )
        .collectionPersister( this )
        .session( session );

    while ( entries.hasNext() ) {
      Object entry = entries.next();
      if ( collection.needsUpdating( entry, i, elementType ) ) {
        // find the matching element
        RowKey assocEntryKey = getTupleKeyForUpdate( key, collection, session, i, entry );
        Tuple assocEntryTuple = metadataProvider.getCollectionMetadata().get( assocEntryKey );
        if ( assocEntryTuple == null ) {
          throw new AssertionFailure( "Updating a collection tuple that is not present: " + "table {" + getTableName() + "} collectionKey {" + key + "} entry {" + entry + "}" );
        }
        // update the matching element
        // FIXME update the associated entity key data
        updateInverseSideOfAssociationNavigation( session, assocEntryTuple, Action.REMOVE, assocEntryKey );

        getElementGridType().nullSafeSet(
            assocEntryTuple,
            collection.getElement( entry ),
            getElementColumnNames(),
            session
        );

        updateInverseSideOfAssociationNavigation( session, assocEntryTuple, Action.ADD, assocEntryKey );

        count++;
      }
      i++;
    }

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

    return rowKeyBuilder.build();
  }

  @Override
  public int getSize(Serializable key, SessionImplementor session) {
    PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .key( key )
        .tableName( getTableName() )
        .session( session )
        .gridDialect( gridDialect )
        .tableName( getTableName() )
        .keyGridType( getKeyGridType() )
        .associationMetadataKey( associationKeyMetadata )
        .collectionPersister( this );

    final Association collectionMetadata = metadataProvider.getCollectionMetadataOrNull();
    return collectionMetadata == null ? 0 : collectionMetadata.size();
  }
View Full Code Here

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

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

      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect( gridDialect )
        .key( id )
        .keyGridType( getKeyGridType() )
        .associationMetadataKey( associationKeyMetadata )
        .collectionPersister( this )
        .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();
          // find the matching element
          RowKey assocEntryKey = getTupleKeyForDelete( id, collection, session, entry, deleteByIndex );
          Tuple assocEntryTuple = metadataProvider.getCollectionMetadata().get( assocEntryKey );
          if ( assocEntryTuple == null ) {
            throw new AssertionFailure( "Deleting a collection tuple that is not present: " + "table {" + getTableName() + "} collectionKey {" + id + "} entry {" + entry + "}" );
          }
          // delete the tuple
          updateInverseSideOfAssociationNavigation( session, assocEntryTuple, Action.REMOVE, assocEntryKey );
          metadataProvider.getCollectionMetadata().remove( assocEntryKey );

          count++;

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

      if ( log.isDebugEnabled() ) {
        log.debug( "Inserting rows of collection: " + MessageHelper.collectionInfoString( this, id, getFactory() ) );
      }

      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect( gridDialect )
        .key( id )
        .keyGridType( getKeyGridType() )
        .associationMetadataKey( associationKeyMetadata )
        .collectionPersister( this )
        .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()
          RowKeyAndTuple keyAndTuple = createAndPutTupleforInsert( id, collection, metadataProvider, session, i, entry );
          completeTuple( keyAndTuple, collection, session, entry );
          updateInverseSideOfAssociationNavigation( session, keyAndTuple.tuple, Action.ADD, keyAndTuple.key );
          collection.afterRowInsert( this, entry, i );
          count++;
        }
        i++;
      }
      metadataProvider.flushToCache();
      if ( log.isDebugEnabled() ) {
        log.debug( "done inserting rows: " + count + " inserted" );
      }
    }
  }
View Full Code Here

      if ( log.isDebugEnabled() ) {
        log.debug( "Inserting collection: " + MessageHelper.collectionInfoString( this, id, getFactory() ) );
      }

      PropertyMetadataProvider metadataProvider = new PropertyMetadataProvider()
        .gridDialect( gridDialect )
        .key( id )
        .keyGridType( getKeyGridType() )
        .associationMetadataKey( associationKeyMetadata )
        .collectionPersister( this )
        .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()
            RowKeyAndTuple keyAndTuple = createAndPutTupleforInsert( id, collection, metadataProvider, session, i, entry );
            completeTuple( keyAndTuple, collection, session, entry );
            updateInverseSideOfAssociationNavigation( session, keyAndTuple.tuple, Action.ADD, keyAndTuple.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

    }
    else if ( associationType == AssociationType.ASSOCIATION_TABLE_TO_ENTITY ) {
      String[] elementColumnNames = getElementColumnNames();
      Object[] elementColumnValues = LogicalPhysicalConverterHelper.getColumnValuesFromResultset( tuple, elementColumnNames );
      Serializable entityId = (Serializable) gridTypeOfAssociatedId.nullSafeGet( tuple, getElementColumnNames(), session, null );
      PropertyMetadataProvider associationProvider = new PropertyMetadataProvider()
          .gridDialect( gridDialect )
          .keyColumnValues( elementColumnValues )
          .session( session )
          .associationMetadataKey( associationKeyMetadataFromElement )
          .collectionPersister( this )
          .key( entityId )
          .inverse();

      // TODO what happens when a row should be *updated* ?: I suspect ADD works OK as it's a put()
      if ( action == Action.ADD ) {
        // FIXME build the key
        Tuple assocTuple = associationProvider.createAndPutAssociationTuple( rowKey );
        for ( String columnName : tuple.getColumnNames() ) {
          assocTuple.put( columnName, tuple.get( columnName ) );
        }
        associationProvider.getCollectionMetadata().put( rowKey, assocTuple );
      }
      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 {" + Arrays.toString( elementColumnNames )
              + "} key column values {" + Arrays.toString( elementColumnValues ) + "}" );
        }
        associationProvider.getCollectionMetadata().remove( rowKey );
      }
      else {
        throw new AssertionFailure( "Unknown action type: " + action );
      }
      associationProvider.flushToCache();
    }
  }
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.