in core/src/main/java/org/hibernate/ogm/loader/impl/OgmLoader.java [548:617]
private TupleAsMapResultSet getResultSet(Serializable id, QueryParameters qp, OgmLoadingContext ogmLoadingContext, SharedSessionContractImplementor session) {
if ( id == null && ogmLoadingContext.hasResultSet() ) {
return ogmLoadingContext.getResultSet();
}
//TODO this if won't work when we will support collections inside the entity tuple but that will do for now
final TupleAsMapResultSet resultset = new TupleAsMapResultSet();
if ( getEntityPersisters().length > 0 ) {
OgmEntityPersister persister = getEntityPersisters()[0];
if ( loadSeveralIds( qp ) ) {
// here we expect to receive QueryParameters.positionalParameters full of ids and thus of the same type.
// if that's not the case, we are in a bit of a trouble :)
int numberOfIds = qp.getPositionalParameterValues().length;
// prepare the array of entity keys for each id
EntityKey[] keys = new EntityKey[numberOfIds];
for ( int index = 0 ; index < numberOfIds ; index++ ) {
keys[index] = EntityKeyBuilder.fromPersister( persister, (Serializable) qp.getPositionalParameterValues()[index], session );
}
if ( multigetGridDialect != null ) {
for ( Tuple tuple : multigetGridDialect.getTuples( keys, persister.getTupleContext( session ) ) ) {
if ( tuple != null ) {
resultset.addTuple( tuple );
}
}
}
else {
for ( EntityKey entityKey : keys ) {
Tuple entry = gridDialect.getTuple( entityKey, persister.getTupleContext( session ) );
if ( entry != null ) {
resultset.addTuple( entry );
}
}
}
}
else {
final EntityKey key = EntityKeyBuilder.fromPersister( persister, id, session );
Tuple entry = gridDialect.getTuple( key, persister.getTupleContext( session ) );
if ( entry != null ) {
resultset.addTuple( entry );
}
}
}
else {
//collection persister
if ( getCollectionPersisters().length != 1 ) {
throw new AssertionFailure( "Found an unexpected number of collection persisters: " + getCollectionPersisters().length );
}
final OgmCollectionPersister persister = (OgmCollectionPersister) getCollectionPersisters()[0];
Object owner = session.getPersistenceContext().getCollectionOwner( id, persister );
AssociationPersister associationPersister = new AssociationPersister.Builder(
persister.getOwnerEntityPersister().getMappedClass()
)
.gridDialect( gridDialect )
.key( id, persister.getKeyGridType() )
.associationKeyMetadata( persister.getAssociationKeyMetadata() )
.associationTypeContext( persister.getAssociationTypeContext() )
.hostingEntity( owner )
.session( session )
.build();
Association assoc = associationPersister.getAssociationOrNull();
if ( assoc != null ) {
for ( RowKey rowKey : assoc.getKeys() ) {
resultset.addTuple( assoc.get( rowKey ) );
}
}
}
return resultset;
}