Java 类org.hibernate.ogm.model.key.spi.AssociationKey 实例源码

项目:hibernate-ogm-redis    文件:AbstractRedisDialect.java   
protected static Object getAssociationRow(Tuple row, AssociationKey associationKey) {
    String[] columnsToPersist = associationKey.getMetadata()
            .getColumnsWithoutKeyColumns( row.getColumnNames() );

    // return value itself if there is only a single column to store
    if ( columnsToPersist.length == 1 ) {
        return row.get( columnsToPersist[0] );
    }
    Entity rowObject = new Entity();
    String prefix = getColumnSharedPrefixOfAssociatedEntityLink( associationKey );
    for ( String column : columnsToPersist ) {
        Object value = row.get( column );
        if ( value != null ) {
            String columnName = column.startsWith( prefix ) ? column.substring( prefix.length() ) : column;
            rowObject.set( columnName, value );
        }
    }

    return rowObject.getPropertiesAsHierarchy();
}
项目:hibernate-ogm-redis    文件:AbstractRedisDialect.java   
/**
 * Retrieve association from a Redis List or Redis Set, depending on the association type.
 *
 * @param key the association key
 *
 * @return the association
 */
protected org.hibernate.ogm.datastore.redis.dialect.value.Association getAssociation(AssociationKey key) {
    String associationId = associationId( key );
    Collection<String> rows;

    if ( key.getMetadata().getAssociationType() == AssociationType.SET ) {
        rows = connection.smembers( associationId );
    }
    else {
        rows = connection.lrange( associationId, 0, -1 );
    }

    org.hibernate.ogm.datastore.redis.dialect.value.Association association = new org.hibernate.ogm.datastore.redis.dialect.value.Association();

    for ( String item : rows ) {
        association.getRows().add( strategy.deserialize( item, Object.class ) );
    }
    return association;
}
项目:hibernate-ogm-ignite    文件:IgniteEmbeddedAssociationSnapshot.java   
public IgniteEmbeddedAssociationSnapshot(AssociationKey associationKey, Tuple tuple) {
    this.associationMetadata = associationKey.getMetadata();
    this.tuple = tuple;
    BinaryObject obj = ( (IgniteTupleSnapshot) tuple.getSnapshot() ).getCacheValue();
    Object objects[] = obj != null ? (Object[]) obj.field( StringHelper.realColumnName( associationMetadata.getCollectionRole() ) ) : null;
    rows = new HashMap<>();
    if ( objects != null ) {
        String rowKeyColumnNames[] = new String[ associationMetadata.getRowKeyColumnNames().length ];
        for ( int i = 0; i < rowKeyColumnNames.length; i++ ) {
            rowKeyColumnNames[i] = StringHelper.stringAfterPoint( associationMetadata.getRowKeyColumnNames()[i] );
        }
        for ( int i = 0; i < objects.length; i++ ) {
            BinaryObject itemObject = (BinaryObject) objects[i];
            Object rowKeyColumnValues[] = new Object[rowKeyColumnNames.length];
            for ( int j = 0; j < rowKeyColumnNames.length; j++ ) {
                rowKeyColumnValues[j] = itemObject.field( rowKeyColumnNames[j] );
            }
            RowKey rowKey = new RowKey( associationMetadata.getRowKeyColumnNames(), rowKeyColumnValues );
            this.rows.put( rowKey, new IgniteTupleSnapshot( null, itemObject, associationMetadata.getAssociatedEntityKeyMetadata().getEntityKeyMetadata() ) );
        }
    }
}
项目:hibernate-ogm-ignite    文件:IgniteDialect.java   
private String createAssociationQuery(AssociationKey key, boolean selectObjects) {
    StringBuilder sb = new StringBuilder();
    if ( selectObjects ) {
        sb.append( "SELECT _KEY, _VAL FROM " );
    }
    else {
        sb.append( "SELECT _KEY FROM " );
    }
    sb.append( key.getMetadata().getTable() ).append( " WHERE " );
    boolean first = true;
    for ( String columnName : key.getColumnNames() ) {
        if ( !first ) {
            sb.append( " AND " );
        }
        else {
            first = false;
        }
        sb.append( StringHelper.realColumnName( columnName ) ).append( "=?" );
    }
    return sb.toString();
}
项目:hibernate-ogm-redis    文件:AbstractRedisDialect.java   
protected void removeAssociations(List<AssociationKey> keys) {
    if ( keys.isEmpty() ) {
        return;
    }
    String[] ids = new String[keys.size()];
    int i = 0;
    for ( AssociationKey key : keys ) {
        ids[i] = associationId( key );
        i++;
    }
    connection.del( ids );
}
项目:hibernate-ogm-redis    文件:AbstractRedisDialect.java   
/**
 * Store an association to a Redis List or Redis Set, depending on the association type.
 *
 * @param key the association key
 * @param association the association document
 */
protected void storeAssociation(
        AssociationKey key,
        org.hibernate.ogm.datastore.redis.dialect.value.Association association) {
    String associationId = associationId( key );

    connection.del( associationId );

    List<Object> rows = association.getRows();

    if ( rows.isEmpty() ) {
        return;
    }

    String[] serializedRows = new String[rows.size()];
    int i = 0;
    for ( Object row : rows ) {
        serializedRows[i] = strategy.serialize( row );
        i++;
    }
    if ( key.getMetadata().getAssociationType() == AssociationType.SET ) {
        connection.sadd( associationId, serializedRows );
    }
    else {
        connection.rpush( associationId, serializedRows );
    }
}
项目:hibernate-ogm-redis    文件:AbstractRedisDialect.java   
/**
 * Retrieve entity that contains the association, do not enhance with entity key
 */
protected TuplePointer getEmbeddingEntityTuplePointer(AssociationKey key, AssociationContext associationContext) {
    TuplePointer tuplePointer = associationContext.getEntityTuplePointer();

    if ( tuplePointer.getTuple() == null ) {
        tuplePointer.setTuple( getTuple( key.getEntityKey(), associationContext ) );
    }

    return tuplePointer;
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
@Override
public org.hibernate.ogm.model.spi.Association getAssociation(AssociationKey key, AssociationContext associationContext) {
    RedisAssociation redisAssociation = null;

    if ( isStoredInEntityStructure( key.getMetadata(), associationContext.getAssociationTypeContext() ) ) {
        TuplePointer tuplePointer = getEmbeddingEntityTuplePointer( key, associationContext );
        if ( tuplePointer == null ) {
            // The entity associated with this association has already been removed
            // see ManyToOneTest#testRemovalOfTransientEntityWithAssociation
            return null;
        }
        Entity owningEntity = getEntityFromTuple( tuplePointer.getTuple() );

        if ( owningEntity != null && DotPatternMapHelpers.hasField(
                owningEntity.getPropertiesAsHierarchy(),
                key.getMetadata().getCollectionRole()
        ) ) {
            redisAssociation = RedisAssociation.fromEmbeddedAssociation( tuplePointer, key.getMetadata() );
        }
    }
    else {
        Association association = getAssociation( key );
        if ( association != null ) {
            redisAssociation = RedisAssociation.fromAssociationDocument( association );
        }
    }

    return redisAssociation != null ? new org.hibernate.ogm.model.spi.Association(
            new RedisAssociationSnapshot(
                    redisAssociation, key
            )
    ) : null;
}
项目:hibernate-ogm-redis    文件:RedisJsonDialect.java   
@Override
public org.hibernate.ogm.model.spi.Association createAssociation(
        AssociationKey key,
        AssociationContext associationContext) {
    RedisAssociation redisAssociation;

    if ( isStoredInEntityStructure( key.getMetadata(), associationContext.getAssociationTypeContext() ) ) {
        TuplePointer tuplePointer = getEmbeddingEntityTuplePointer( key, associationContext );
        Entity owningEntity = getEntityFromTuple( tuplePointer.getTuple() );

        if ( owningEntity == null ) {
            owningEntity = new Entity();
            storeEntity( key.getEntityKey(), owningEntity, associationContext.getAssociationTypeContext().getHostingEntityOptionsContext() );
            tuplePointer.setTuple( new Tuple( new RedisJsonTupleSnapshot( owningEntity ), SnapshotType.UPDATE ) );
        }

        redisAssociation = RedisAssociation.fromEmbeddedAssociation( tuplePointer, key.getMetadata() );
    }
    else {
        redisAssociation = RedisAssociation.fromAssociationDocument( new Association() );
    }

    org.hibernate.ogm.model.spi.Association association = new org.hibernate.ogm.model.spi.Association(
            new RedisAssociationSnapshot(
                    redisAssociation,
                    key
            )
    );

    // in the case of an association stored in the entity structure, we might end up with rows present in the current snapshot of the entity
    // while we want an empty association here. So, in this case, we clear the snapshot to be sure the association created is empty.
    if ( !association.isEmpty() ) {
        association.clear();
    }

    return association;
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
@Override
public Association getAssociation(
        AssociationKey key, AssociationContext associationContext) {
    RedisAssociation redisAssociation = null;

    if ( isStoredInEntityStructure( key.getMetadata(), associationContext.getAssociationTypeContext() ) ) {
        TuplePointer tuplePointer = getEmbeddingEntityTuplePointer( key, associationContext );
        if ( tuplePointer == null ) {
            // The entity associated with this association has already been removed
            // see ManyToOneTest#testRemovalOfTransientEntityWithAssociation
            return null;
        }
        HashEntity owningEntity = getEntityFromTuple( tuplePointer.getTuple() );

        if ( owningEntity != null && owningEntity.has( key.getMetadata().getCollectionRole() ) ) {
            redisAssociation = RedisAssociation.fromHashEmbeddedAssociation( tuplePointer, key.getMetadata() );
        }
    }
    else {
        org.hibernate.ogm.datastore.redis.dialect.value.Association association = getAssociation( key );

        if ( association == null ) {
            return null;
        }
        redisAssociation = RedisAssociation.fromAssociationDocument( association );
    }

    return redisAssociation != null ? new org.hibernate.ogm.model.spi.Association(
            new RedisAssociationSnapshot(
                    redisAssociation, key
            )
    ) : null;
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
@Override
public Association createAssociation(
        AssociationKey key, AssociationContext associationContext) {

    RedisAssociation redisAssociation;
    if ( isStoredInEntityStructure( key.getMetadata(), associationContext.getAssociationTypeContext() ) ) {
        TuplePointer tuplePointer = getEmbeddingEntityTuplePointer( key, associationContext );
        HashEntity owningEntity = getEntityFromTuple( tuplePointer.getTuple() );

        if ( owningEntity == null ) {
            owningEntity = new HashEntity( new HashMap<String, String>() );
            storeEntity( key.getEntityKey(), owningEntity, associationContext.getAssociationTypeContext().getHostingEntityOptionsContext() );
            tuplePointer.setTuple( new Tuple( new RedisHashTupleSnapshot( owningEntity ), SnapshotType.UPDATE ) );
        }

        redisAssociation = RedisAssociation.fromHashEmbeddedAssociation( tuplePointer, key.getMetadata() );

    }
    else {
        redisAssociation = RedisAssociation.fromAssociationDocument( new org.hibernate.ogm.datastore.redis.dialect.value.Association() );
    }

    return new org.hibernate.ogm.model.spi.Association(
            new RedisAssociationSnapshot(
                    redisAssociation, key
            )
    );
}
项目:hibernate-ogm-redis    文件:RedisHashDialect.java   
private Object getAssociationRows(
        Association association,
        AssociationKey key) {
    List<Object> rows = new ArrayList<>( association.size() );
    for ( RowKey rowKey : association.getKeys() ) {
        rows.add( getAssociationRow( association.get( rowKey ), key ) );
    }

    return rows;
}
项目:hibernate-ogm-ignite    文件:IgniteDatastoreProvider.java   
/**
 * Converting association key to cache key
 *
 * @param key - association key
 * @return string key
 */
public Object createParentKeyObject(AssociationKey key) {
    Object result = null;
    if ( key.getColumnValues().length == 1 ) {
        result = key.getColumnValues()[0];
    }
    else {
        throw new UnsupportedOperationException( "Not implemented yet" );
    }
    return result;
}
项目:hibernate-ogm-ignite    文件:IgniteAssociationSnapshot.java   
public IgniteAssociationSnapshot(AssociationKey associationKey, Map<Object, BinaryObject> associationMap) {
    this.rows = CollectionHelper.newHashMap( associationMap.size() );
    for ( Map.Entry<Object, BinaryObject> entry : associationMap.entrySet() ) {
        IgniteAssociationRowSnapshot snapshot = new IgniteAssociationRowSnapshot( entry.getKey(), entry.getValue(), associationKey.getMetadata() );
        String rowKeyColumnNames[] = associationKey.getMetadata().getRowKeyColumnNames();
        Object rowKeyColumnValues[] = new Object[rowKeyColumnNames.length];
        for ( int i = 0; i < rowKeyColumnNames.length; i++ ) {
            String columnName = rowKeyColumnNames[i];
            rowKeyColumnValues[i] = snapshot.get( columnName );
        }
        RowKey rowKey = new RowKey( rowKeyColumnNames, rowKeyColumnValues );
        this.rows.put( rowKey, snapshot );
    }
}
项目:hibernate-ogm-ignite    文件:IgniteDialect.java   
@Override
public Association createAssociation(AssociationKey key, AssociationContext associationContext) {
    if ( key.getMetadata().getAssociationKind() == AssociationKind.ASSOCIATION ) {
        return new Association( new IgniteAssociationSnapshot( key ) );
    }
    else if ( key.getMetadata().getAssociationKind() == AssociationKind.EMBEDDED_COLLECTION ) {
        return new Association( new IgniteEmbeddedAssociationSnapshot( key, associationContext.getEntityTuplePointer().getTuple() ) );
    }
    else {
        throw new UnsupportedOperationException( "Unknown association kind " + key.getMetadata().getAssociationKind() );
    }
}
项目:hibernate-ogm-redis    文件:RedisAssociationSnapshot.java   
public RedisAssociationSnapshot(RedisAssociation association, AssociationKey key) {
    super( key, MapAssociationRowsHelpers.getRows( association.getRows(), key ), RedisAssociationRowFactory.INSTANCE );
    this.redisAssociation = association;
}
项目:hibernate-ogm-ignite    文件:IgniteAssociationSnapshot.java   
public IgniteAssociationSnapshot(AssociationKey associationKey) {
    rows = Collections.emptyMap();
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
@Override
public Association getAssociation(AssociationKey key, AssociationContext associationContext) {
    throw new UnsupportedOperationException("not yet supported");
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
@Override
public Association createAssociation(AssociationKey key, AssociationContext associationContext) {
    throw new UnsupportedOperationException("not yet supported");
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
@Override
public void insertOrUpdateAssociation(AssociationKey key, Association association, AssociationContext associationContext) {
    throw new UnsupportedOperationException("not yet supported");
}
项目:lightblue-hibernate-ogm    文件:LightblueDialect.java   
@Override
public void removeAssociation(AssociationKey key, AssociationContext associationContext) {
    throw new UnsupportedOperationException("not yet supported");
}
项目:hibernate-ogm-redis    文件:AbstractRedisDialect.java   
/**
 * Create a String representation of the entity key in the format of {@code Association:(table name):(columnId)}.
 * {@link #ASSOCIATIONS}
 *
 * @param key Key of the association
 *
 * @return byte array containing the key
 */
protected String associationId(AssociationKey key) {
    String prefix = ASSOCIATIONS + ":" + key.getTable() + ":";
    String entityId = keyToString( key.getColumnNames(), key.getColumnValues() ) + ":" + key.getMetadata()
            .getCollectionRole();

    return prefix + entityId;
}