@Override public EntityIdentifierDescription getIdentifierDescription() { return targetEntityReference.getIdentifierDescription(); } }
private void writeEntityReferenceFetches(EntityReference entityReference, int depth, PrintWriter printWriter) { if ( BidirectionalEntityReference.class.isInstance( entityReference ) ) { return; } if ( entityReference.getIdentifierDescription().hasFetches() ) { printWriter.println( TreePrinterHelper.INSTANCE.generateNodePrefix( depth ) + "(entity id) " ); writeFetches( ( (FetchSource) entityReference.getIdentifierDescription() ).getFetches(), depth+1, printWriter ); } writeFetches( entityReference.getFetches(), depth, printWriter ); }
public FetchStats processFetches( FetchSource fetchSource, SelectStatementBuilder selectStatementBuilder, ReaderCollector readerCollector) { final FetchStatsImpl fetchStats = new FetchStatsImpl(); // if the fetchSource is an entityReference, we should also walk its identifier fetches here... // // what if fetchSource is a composite fetch (as it would be in the case of a key-many-to-one)? if ( EntityReference.class.isInstance( fetchSource ) ) { final EntityReference fetchOwnerAsEntityReference = (EntityReference) fetchSource; if ( fetchOwnerAsEntityReference.getIdentifierDescription().hasFetches() ) { final FetchSource entityIdentifierAsFetchSource = (FetchSource) fetchOwnerAsEntityReference.getIdentifierDescription(); for ( Fetch fetch : entityIdentifierAsFetchSource.getFetches() ) { processFetch( selectStatementBuilder, fetchSource, fetch, readerCollector, fetchStats ); } } } processFetches( fetchSource, selectStatementBuilder, readerCollector, fetchStats ); return fetchStats; }
private void resolveEntityKey( ResultSet resultSet, ResultSetProcessingContextImpl context, EntityReferenceInitializer entityReferenceInitializer) throws SQLException { final EntityReference entityReference = entityReferenceInitializer.getEntityReference(); final EntityIdentifierDescription identifierDescription = entityReference.getIdentifierDescription(); if ( identifierDescription.hasFetches() || identifierDescription.hasBidirectionalEntityReferences() ) { resolveEntityKey( resultSet, context, (FetchSource) identifierDescription ); } entityReferenceInitializer.resolveEntityKey( resultSet, context ); }
@Override public void startingEntityIdentifier(EntityIdentifierDefinition entityIdentifierDefinition) { log.tracef( "%s Starting entity identifier : %s", StringHelper.repeat( ">>", fetchSourceStack.size() ), entityIdentifierDefinition.getEntityDefinition().getEntityPersister().getEntityName() ); final EntityReference entityReference = (EntityReference) currentSource(); // perform some stack validation if ( ! entityReference.getEntityPersister().equals( entityIdentifierDefinition.getEntityDefinition().getEntityPersister() ) ) { throw new WalkingException( String.format( "Encountered unexpected fetch owner [%s] in stack while processing entity identifier for [%s]", entityReference.getEntityPersister().getEntityName(), entityIdentifierDefinition.getEntityDefinition().getEntityPersister().getEntityName() ) ); } if ( ExpandingEntityIdentifierDescription.class.isInstance( entityReference.getIdentifierDescription() ) ) { pushToStack( (ExpandingEntityIdentifierDescription) entityReference.getIdentifierDescription() ); } }
if ( entityReference.getIdentifierDescription() != identifierDescription ) { throw new WalkingException( String.format(