Package org.hibernate.loader.plan.spi

Examples of org.hibernate.loader.plan.spi.EntityReference


              fetchSource
          )
      );
    }

    final EntityReference entityReference = (EntityReference) fetchSource;
    // NOTE : this is not the most exhaustive of checks because of hierarchical associations (employee/manager)
    if ( ! entityReference.getEntityPersister().equals( entityDefinition.getEntityPersister() ) ) {
      throw new WalkingException( "Mismatched FetchSource from stack on pop" );
    }
  }
View Full Code Here


        "%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() );
    }
  }
View Full Code Here

    if ( ! ExpandingEntityIdentifierDescription.class.isInstance( currentSource ) ) {
      // in this case, the current source should be the entity that owns entityIdentifierDefinition
      if ( ! EntityReference.class.isInstance( currentSource ) ) {
        throw new WalkingException( "Unexpected state in FetchSource stack" );
      }
      final EntityReference entityReference = (EntityReference) currentSource;
      if ( entityReference.getEntityPersister().getEntityKeyDefinition() != entityIdentifierDefinition ) {
        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()
            )
        );
      }
      return;
    }

    // the current source is ExpandingEntityIdentifierDescription...
    final ExpandingEntityIdentifierDescription identifierDescription =
        (ExpandingEntityIdentifierDescription) popFromStack();

    // and then on the node before it (which should be the entity that owns the identifier being described)
    final ExpandingFetchSource entitySource = currentSource();
    if ( ! EntityReference.class.isInstance( entitySource ) ) {
      throw new WalkingException( "Unexpected state in FetchSource stack" );
    }
    final EntityReference entityReference = (EntityReference) entitySource;
    if ( entityReference.getIdentifierDescription() != identifierDescription ) {
      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()
          )
      );
    }
View Full Code Here

    this.readerCollector = new CollectionLoaderReaderCollectorImpl(
        new CollectionReturnReader( rootReturn ),
        new CollectionReferenceInitializerImpl( rootReturn, collectionReferenceAliases )
    );
    if ( rootReturn.getCollectionPersister().getElementType().isEntityType() ) {
      final EntityReference elementEntityReference = rootReturn.getElementGraph().resolveEntityReference();
      final EntityReferenceAliases elementEntityReferenceAliases = new EntityReferenceAliasesImpl(
          collectionReferenceAliases.getElementTableAlias(),
          collectionReferenceAliases.getEntityElementColumnAliases()
      );
      aliasResolutionContext.registerQuerySpaceAliases(
          elementEntityReference.getQuerySpaceUid(),
          elementEntityReferenceAliases
      );
      readerCollector.add(
        new EntityReferenceInitializerImpl( elementEntityReference, elementEntityReferenceAliases )
      );
    }
    if ( rootReturn.getCollectionPersister().hasIndex() &&
        rootReturn.getCollectionPersister().getIndexType().isEntityType() ) {
      final EntityReference indexEntityReference = rootReturn.getIndexGraph().resolveEntityReference();
      final EntityReferenceAliases indexEntityReferenceAliases = aliasResolutionContext.generateEntityReferenceAliases(
          indexEntityReference.getQuerySpaceUid(),
          indexEntityReference.getEntityPersister()
      );
      readerCollector.add(
          new EntityReferenceInitializerImpl( indexEntityReference, indexEntityReferenceAliases )
      );
    }
View Full Code Here

  @Override
  protected  void applyRootReturnSelectFragments(SelectStatementBuilder selectStatementBuilder) {
    if ( getQueryableCollection().hasIndex() &&
        getQueryableCollection().getIndexType().isEntityType() ) {
      final EntityReference indexEntityReference = getRootCollectionReturn().getIndexGraph().resolveEntityReference();
      final EntityReferenceAliases indexEntityReferenceAliases = getAliasResolutionContext().resolveEntityReferenceAliases(
          indexEntityReference.getQuerySpaceUid()
      );
      selectStatementBuilder.appendSelectClauseFragment(
          ( (OuterJoinLoadable) indexEntityReference.getEntityPersister() ).selectFragment(
              indexEntityReferenceAliases.getTableAlias(),
              indexEntityReferenceAliases.getColumnAliases().getSuffix()
          )
      );
    }
View Full Code Here

    // 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,
View Full Code Here

  private void resolveEntityKey(
      ResultSet resultSet,
      ResultSetProcessingContextImpl context,
      EntityReferenceInitializer entityReferenceInitializer,
      Map<EntityReference,EntityReferenceInitializer> initializerByEntityReference) throws SQLException {
    final EntityReference entityReference = entityReferenceInitializer.getEntityReference();
    final EntityIdentifierDescription identifierDescription = entityReference.getIdentifierDescription();

    if ( identifierDescription.hasFetches() || identifierDescription.hasBidirectionalEntityReferences() ) {
      resolveEntityKey( resultSet, context, (FetchSource) identifierDescription, initializerByEntityReference );
    }
    entityReferenceInitializer.resolveEntityKey( resultSet, context );
View Full Code Here

    // if the fetch owner is an entityReference, we should also walk its identifier fetches here...
    //
    // what if fetchOwner is a composite fetch (as it would be in the case of a key-many-to-one)?
    if ( EntityReference.class.isInstance( fetchOwner ) ) {
      final EntityReference fetchOwnerAsEntityReference = (EntityReference) fetchOwner;
      for ( Fetch fetch : fetchOwnerAsEntityReference.getIdentifierDescription().getFetches() ) {
        processFetch(
            selectStatementBuilder,
            factory,
            joinFragment,
            fetchOwner,
View Full Code Here

    else {
      // todo : add a mapping here from EntityReference -> EntityReferenceReader
      //
      // need to be careful here about bi-directionality, just not sure how to best check for bi-directionality here.
      //
      final EntityReference fetchedEntityReference = (EntityReference) fetch;
      final EntityReferenceAliases fetchedAliases = aliasResolutionContext.resolveAliases( fetchedEntityReference );

      if ( BidirectionalEntityFetch.class.isInstance( fetchedEntityReference ) ) {
        return;
      }
View Full Code Here

        public EntityAliases getColumnAliases() {
          return aliases.getEntityElementColumnAliases();
        }
      };

      final EntityReference elementEntityReference = (EntityReference) fetch.getElementGraph();
      readerCollector.addReader(
          new EntityReferenceReader(
              elementEntityReference,
              entityReferenceAliases,
              buildIdentifierReader(
                  selectStatementBuilder,
                  factory,
                  joinFragment,
                  elementEntityReference,
                  buildingParameters,
                  aliasResolutionContext,
                  readerCollector,
                  entityReferenceAliases,
                  stats
              )
          )
      );
    }
    else {
      final QueryableCollection queryableCollection = (QueryableCollection) fetch.getCollectionPersister();
      final Joinable joinableCollection = (Joinable) fetch.getCollectionPersister();

      final String rhsTableAlias = aliases.getElementTableAlias();
      final String[] rhsColumnNames = JoinHelper.getRHSColumnNames( fetch.getFetchedType(), factory );

      final String lhsTableAlias = resolveLhsTableAlias( fetchOwner, fetch, aliasResolutionContext );
      // todo : this is not exactly correct.  it assumes the join refers to the LHS PK
      final String[] aliasedLhsColumnNames = fetch.toSqlSelectFragments( lhsTableAlias );

      final String on = resolveAdditionalJoinCondition(
          factory,
          rhsTableAlias,
          fetchOwner,
          fetch,
          buildingParameters.getQueryInfluencers(),
          aliasResolutionContext
      );

      addJoins(
          joinFragment,
          joinableCollection,
          fetch.isNullable() ? JoinType.LEFT_OUTER_JOIN : JoinType.INNER_JOIN,
          rhsTableAlias,
          rhsColumnNames,
          aliasedLhsColumnNames,
          on
      );

      // select the "collection columns"
      selectStatementBuilder.appendSelectClauseFragment(
          queryableCollection.selectFragment(
              rhsTableAlias,
              aliases.getCollectionColumnAliases().getSuffix()
          )
      );

      if ( fetch.getCollectionPersister().isOneToMany() ) {
        // if the collection elements are entities, select the entity columns as well
        final OuterJoinLoadable elementPersister = (OuterJoinLoadable) queryableCollection.getElementPersister();
        selectStatementBuilder.appendSelectClauseFragment(
            elementPersister.selectFragment(
                aliases.getElementTableAlias(),
                aliases.getEntityElementColumnAliases().getSuffix()
            )
        );

        final EntityReferenceAliases entityReferenceAliases = new EntityReferenceAliases() {
          @Override
          public String getTableAlias() {
            return aliases.getElementTableAlias();
          }

          @Override
          public EntityAliases getColumnAliases() {
            return aliases.getEntityElementColumnAliases();
          }
        };

        final EntityReference elementEntityReference = (EntityReference) fetch.getElementGraph();
        readerCollector.addReader(
            new EntityReferenceReader(
                elementEntityReference,
                entityReferenceAliases,
                buildIdentifierReader(
View Full Code Here

TOP

Related Classes of org.hibernate.loader.plan.spi.EntityReference

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.