Package org.hibernate.persister.entity

Examples of org.hibernate.persister.entity.OuterJoinLoadable


        }
        else {
          condition = additionalJoinConditions + " and " + manyToManyFilter;
        }

        final OuterJoinLoadable elementPersister = (OuterJoinLoadable) queryableCollection.getElementPersister();

        addJoins(
            joinFragment,
            elementPersister,
//            JoinType.INNER_JOIN,
            JoinType.LEFT_OUTER_JOIN,
            elementTableAlias,
            elementPersister.getIdentifierColumnNames(),
            StringHelper.qualify( collectionTableAlias, queryableCollection.getElementColumnNames() ),
            condition
        );

        // add select fragments from the element entity table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        selectStatementBuilder.appendSelectClauseFragment(
            elementPersister.selectFragment(
                aliases.getElementTableAlias(),
                aliases.getEntityElementColumnAliases().getSuffix()
            )
        );
      }

      final String manyToManyOrdering = queryableCollection.getManyToManyOrderByString( collectionTableAlias );
      if ( StringHelper.isNotEmpty( manyToManyOrdering ) ) {
        selectStatementBuilder.appendOrderByFragment( manyToManyOrdering );
      }

      final String ordering = queryableCollection.getSQLOrderByString( collectionTableAlias );
      if ( StringHelper.isNotEmpty( ordering ) ) {
        selectStatementBuilder.appendOrderByFragment( ordering );
      }


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


      EntityReturn rootReturn,
      SessionFactoryImplementor factory,
      QueryBuildingParameters buildingParameters,
      AliasResolutionContext aliasResolutionContext) {
    final String rootAlias = aliasResolutionContext.resolveAliases( rootReturn ).getTableAlias();
    final OuterJoinLoadable rootLoadable = (OuterJoinLoadable) rootReturn.getEntityPersister();
    final Queryable rootQueryable = (Queryable) rootReturn.getEntityPersister();

    applyKeyRestriction( select, rootAlias, keyColumnNames, buildingParameters.getBatchSize() );
    select.appendRestrictions(
        rootQueryable.filterFragment(
            rootAlias,
            buildingParameters.getQueryInfluencers().getEnabledFilters()
        )
    );
    select.appendRestrictions( rootLoadable.whereJoinFragment( rootAlias, true, true ) );
    select.appendSelectClauseFragment(
        rootLoadable.selectFragment(
            rootAlias,
            aliasResolutionContext.resolveAliases( rootReturn ).getColumnAliases().getSuffix()
        )
    );

    final String fromTableFragment;
    if ( buildingParameters.getLockOptions() != null ) {
      fromTableFragment = factory.getDialect().appendLockHint(
          buildingParameters.getLockOptions(),
          rootLoadable.fromTableFragment( rootAlias )
      );
      select.setLockOptions( buildingParameters.getLockOptions() );
    }
    else if ( buildingParameters.getLockMode() != null ) {
      fromTableFragment = factory.getDialect().appendLockHint(
          buildingParameters.getLockMode(),
          rootLoadable.fromTableFragment( rootAlias )
      );
      select.setLockMode( buildingParameters.getLockMode() );
    }
    else {
      fromTableFragment = rootLoadable.fromTableFragment( rootAlias );
    }
    select.appendFromClauseFragment( fromTableFragment + rootLoadable.fromJoinFragment( rootAlias, true, true ) );
  }
View Full Code Here

      EntityReturn rootReturn,
      SessionFactoryImplementor factory,
      QueryBuildingParameters buildingParameters,
      AliasResolutionContext aliasResolutionContext) {
    final String rootAlias = aliasResolutionContext.resolveAliases( rootReturn ).getTableAlias();
    final OuterJoinLoadable rootLoadable = (OuterJoinLoadable) rootReturn.getEntityPersister();
    final Queryable rootQueryable = (Queryable) rootReturn.getEntityPersister();

    applyKeyRestriction( select, rootAlias, keyColumnNames, buildingParameters.getBatchSize() );
    select.appendRestrictions(
        rootQueryable.filterFragment(
            rootAlias,
            buildingParameters.getQueryInfluencers().getEnabledFilters()
        )
    );
    select.appendRestrictions( rootLoadable.whereJoinFragment( rootAlias, true, true ) );
    select.appendSelectClauseFragment(
        rootLoadable.selectFragment(
            rootAlias,
            aliasResolutionContext.resolveAliases( rootReturn ).getColumnAliases().getSuffix()
        )
    );

    final String fromTableFragment;
    if ( buildingParameters.getLockOptions() != null ) {
      fromTableFragment = factory.getDialect().appendLockHint(
          buildingParameters.getLockOptions(),
          rootLoadable.fromTableFragment( rootAlias )
      );
      select.setLockOptions( buildingParameters.getLockOptions() );
    }
    else if ( buildingParameters.getLockMode() != null ) {
      fromTableFragment = factory.getDialect().appendLockHint(
          buildingParameters.getLockMode(),
          rootLoadable.fromTableFragment( rootAlias )
      );
      select.setLockMode( buildingParameters.getLockMode() );
    }
    else {
      fromTableFragment = rootLoadable.fromTableFragment( rootAlias );
    }
    select.appendFromClauseFragment( fromTableFragment + rootLoadable.fromJoinFragment( rootAlias, true, true ) );
  }
View Full Code Here

                  final QueryableCollection collectionPersister = (QueryableCollection) joinable;
                  lhsTableName = collectionPersister.getTableName();
                  lhsColumnNames = collectionPersister.getElementColumnNames();
                }
                else {
                  final OuterJoinLoadable entityPersister = (OuterJoinLoadable) locateOwningPersister();
                  lhsTableName = getLHSTableName( aType, attributeNumber(), entityPersister );
                  lhsColumnNames = getLHSColumnNames(
                      aType,
                      attributeNumber(),
                      columnPosition,
View Full Code Here

      AliasResolutionContextImpl aliasResolutionContext) {
    final EntityReferenceAliases entityReferenceAliases = aliasResolutionContext.resolveEntityReferenceAliases(
        rootReturn.getQuerySpaceUid()
    );

    final OuterJoinLoadable rootLoadable = (OuterJoinLoadable) rootReturn.getEntityPersister();

    // add the root persister SELECT fragments...
    select.appendSelectClauseFragment(
        rootLoadable.selectFragment(
            entityReferenceAliases.getTableAlias(),
            entityReferenceAliases.getColumnAliases().getSuffix()
        )
    );
View Full Code Here

        keyColumnNamesToUse,
        buildingParameters.getBatchSize()
    );

    // don't quite remember why these 2 anymore, todo : research that and document this code or remove it etc..
    final OuterJoinLoadable rootLoadable = (OuterJoinLoadable) rootQuerySpace.getEntityPersister();
    final Queryable rootQueryable = (Queryable) rootQuerySpace.getEntityPersister();
    select.appendRestrictions(
        rootQueryable.filterFragment(
            entityReferenceAliases.getTableAlias(),
            Collections.emptyMap()
        )
    );
    select.appendRestrictions(
        rootLoadable.whereJoinFragment(
            entityReferenceAliases.getTableAlias(),
            true,
            true
        )
    );
View Full Code Here

    if ( includeCollectionColumns ) {
//      buf.append( selectFragment( lhsAlias, "" ) )//ignore suffix for collection columns!
      buf.append( selectFragment( lhsAlias, collectionSuffix ) )
          .append( ", " );
    }
    OuterJoinLoadable ojl = ( OuterJoinLoadable ) getElementPersister();
    return buf.append( ojl.selectFragment( lhsAlias, entitySuffix ) )//use suffix for the entity columns
        .toString();
  }
View Full Code Here

      else {
        throw new NotYetImplementedException( "Cannot determine RHS alis for a fetch that is not an EntityReference or CollectionReference." );
      }

      // TODO: can't this be found in CollectionAliases or EntityAliases? should be moved to LoadQueryAliasResolutionContextImpl
      final OuterJoinLoadable fetchSourcePersister = (OuterJoinLoadable) currentFetch.getOwner().retrieveFetchSourcePersister();
      final int propertyNumber = fetchSourcePersister.getEntityMetamodel().getPropertyIndex( currentFetch.getOwnerPropertyName() );
      final String[] aliasedLhsColumnNames = JoinHelper.getAliasedLHSColumnNames(
          joinableAssociation.getAssociationType(),
          lhsAlias,
          propertyNumber,
          fetchSourcePersister,
View Full Code Here

      CollectionReference currentCollectionReference,
      String withClause,
      boolean hasRestriction,
      Map<String, Filter> enabledFilters) throws MappingException {
    this.propertyPath = currentFetch.getPropertyPath();
    final OuterJoinLoadable ownerPersister = (OuterJoinLoadable) currentFetch.getOwner().retrieveFetchSourcePersister();
    final int propertyNumber = ownerPersister.getEntityMetamodel().getPropertyIndex( currentFetch.getOwnerPropertyName() );
    final boolean isNullable = ownerPersister.isSubclassPropertyNullable( propertyNumber );
    if ( currentFetch.getFetchStrategy().getStyle() == FetchStyle.JOIN ) {
      joinType = isNullable ? JoinType.LEFT_OUTER_JOIN : JoinType.INNER_JOIN;
    }
    else {
      joinType = JoinType.NONE;
View Full Code Here

  public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
  throws HibernateException {

    final SessionFactoryImplementor factory = criteriaQuery.getFactory();
    final OuterJoinLoadable persister = (OuterJoinLoadable) factory.getEntityPersister( criteriaImpl.getEntityOrClassName() );

    createAndSetInnerQuery( criteriaQuery, factory );
   
    CriteriaJoinWalker walker = new CriteriaJoinWalker(
        persister,
View Full Code Here

TOP

Related Classes of org.hibernate.persister.entity.OuterJoinLoadable

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.