private void createRelationshipforCollectionOfComponents()

in neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/dialect/impl/BaseNeo4jAssociationQueries.java [360:416]


	private void createRelationshipforCollectionOfComponents(AssociationKey associationKey, String collectionRole, String[] embeddedColumnNames, Object[] embeddedColumnValues, StringBuilder queryBuilder) {
		int offset = associationKey.getEntityKey().getColumnNames().length;
		if ( isPartOfEmbedded( collectionRole ) ) {
			String[] pathToEmbedded = appendEmbeddedNodes( collectionRole, queryBuilder );
			queryBuilder.append( " MERGE (e) -[r:" );
			appendRelationshipType( queryBuilder, pathToEmbedded[pathToEmbedded.length - 1] );
		}
		else {
			queryBuilder.append( " MERGE (owner) -[r:" );
			appendRelationshipType( queryBuilder, collectionRole );
		}
		appendProperties( queryBuilder, associationKey.getMetadata().getRowKeyIndexColumnNames(), offset );
		offset += associationKey.getMetadata().getRowKeyIndexColumnNames().length;
		queryBuilder.append( "]-> " );
		queryBuilder.append( "(target:" );
		queryBuilder.append( EMBEDDED );
		queryBuilder.append( ":" );
		escapeIdentifier( queryBuilder, associationKey.getMetadata().getAssociatedEntityKeyMetadata().getEntityKeyMetadata().getTable() );

		int index = 0;
		int embeddedNumber = 0;

		EmbeddedNodesTree tree = createEmbeddedTree( collectionRole, embeddedColumnNames, embeddedColumnValues, offset );
		if ( !hasRowIndex( associationKey ) ) {
			appendPrimitiveProperties( queryBuilder, index, tree );
		}
		queryBuilder.append( ")" );

		// Append relationships representing embedded properties
		Map<String, EmbeddedNodesTree> children = tree.getChildren();
		boolean first = true;
		for ( Entry<String, EmbeddedNodesTree> entry : children.entrySet() ) {
			index = 0;
			String relationshipType = entry.getKey();
			EmbeddedNodesTree child = entry.getValue();
			if ( first ) {
				first = false;
			}
			else {
				queryBuilder.append( ", (target)" );
			}
			queryBuilder.append( " - [:" );
			appendRelationshipType( queryBuilder, relationshipType );
			queryBuilder.append( "] -> " );
			queryBuilder.append( "(a" );
			queryBuilder.append( embeddedNumber++ );
			queryBuilder.append( ":" );
			queryBuilder.append( EMBEDDED );
			appendPrimitiveProperties( queryBuilder, index, child );
			queryBuilder.append( ")" );
		}
		if ( hasRowIndex( associationKey ) && !tree.getProperties().isEmpty() ) {
			queryBuilder.append( " SET target = " );
			appendPrimitiveProperties( queryBuilder, index, tree );
		}
		queryBuilder.append( " RETURN r" );
	}