Package org.hibernate.persister.entity

Examples of org.hibernate.persister.entity.Queryable


        includeInResultRowList.add( true );
        hasScalars = true;
      }
      else if ( rtn instanceof RootReturn ) {
        RootReturn rootRtn = ( RootReturn ) rtn;
        Queryable persister = ( Queryable ) factory.getEntityPersister( rootRtn.getEntityName() );
        entityPersisters.add( persister );
        lockModes.add( rootRtn.getLockMode() );
        resultColumnProcessors.add( new NonScalarResultColumnProcessor( returnableCounter++ ) );
        nonScalarReturnList.add( rtn );
        entityOwners.add( new Integer( -1 ) );
        resultTypes.add( persister.getType() );
        specifiedAliases.add( rootRtn.getAlias() );
        entityAliases.add( rootRtn.getEntityAliases() );
        ArrayHelper.addAll( querySpaces, persister.getQuerySpaces() );
        includeInResultRowList.add( true );
      }
      else if ( rtn instanceof CollectionReturn ) {
        CollectionReturn collRtn = ( CollectionReturn ) rtn;
        String role = collRtn.getOwnerEntityName() + "." + collRtn.getOwnerProperty();
        QueryableCollection persister = ( QueryableCollection ) factory.getCollectionPersister( role );
        collectionPersisters.add( persister );
        lockModes.add( collRtn.getLockMode() );
        resultColumnProcessors.add( new NonScalarResultColumnProcessor( returnableCounter++ ) );
        nonScalarReturnList.add( rtn );
        collectionOwners.add( new Integer( -1 ) );
        resultTypes.add( persister.getType() );
        specifiedAliases.add( collRtn.getAlias() );
        collectionAliases.add( collRtn.getCollectionAliases() );
        // determine if the collection elements are entities...
        Type elementType = persister.getElementType();
        if ( elementType.isEntityType() ) {
          Queryable elementPersister = ( Queryable ) ( ( EntityType ) elementType ).getAssociatedJoinable( factory );
          entityPersisters.add( elementPersister );
          entityOwners.add( new Integer( -1 ) );
          entityAliases.add( collRtn.getElementEntityAliases() );
          ArrayHelper.addAll( querySpaces, elementPersister.getQuerySpaces() );
        }
        includeInResultRowList.add( true );
      }
      else if ( rtn instanceof EntityFetchReturn ) {
        EntityFetchReturn fetchRtn = ( EntityFetchReturn ) rtn;
        NonScalarReturn ownerDescriptor = fetchRtn.getOwner();
        int ownerIndex = nonScalarReturnList.indexOf( ownerDescriptor );
        entityOwners.add( new Integer( ownerIndex ) );
        lockModes.add( fetchRtn.getLockMode() );
        Queryable ownerPersister = determineAppropriateOwnerPersister( ownerDescriptor );
        EntityType fetchedType = ( EntityType ) ownerPersister.getPropertyType( fetchRtn.getOwnerProperty() );
        String entityName = fetchedType.getAssociatedEntityName( getFactory() );
        Queryable persister = ( Queryable ) factory.getEntityPersister( entityName );
        entityPersisters.add( persister );
        nonScalarReturnList.add( rtn );
        specifiedAliases.add( fetchRtn.getAlias() );
        entityAliases.add( fetchRtn.getEntityAliases() );
        ArrayHelper.addAll( querySpaces, persister.getQuerySpaces() );
        includeInResultRowList.add( false );
      }
      else if ( rtn instanceof CollectionFetchReturn ) {
        CollectionFetchReturn fetchRtn = ( CollectionFetchReturn ) rtn;
        NonScalarReturn ownerDescriptor = fetchRtn.getOwner();
        int ownerIndex = nonScalarReturnList.indexOf( ownerDescriptor );
        collectionOwners.add( new Integer( ownerIndex ) );
        lockModes.add( fetchRtn.getLockMode() );
        Queryable ownerPersister = determineAppropriateOwnerPersister( ownerDescriptor );
        String role = ownerPersister.getEntityName() + '.' + fetchRtn.getOwnerProperty();
        QueryableCollection persister = ( QueryableCollection ) factory.getCollectionPersister( role );
        collectionPersisters.add( persister );
        nonScalarReturnList.add( rtn );
        specifiedAliases.add( fetchRtn.getAlias() );
        collectionAliases.add( fetchRtn.getCollectionAliases() );
        // determine if the collection elements are entities...
        Type elementType = persister.getElementType();
        if ( elementType.isEntityType() ) {
          Queryable elementPersister = ( Queryable ) ( ( EntityType ) elementType ).getAssociatedJoinable( factory );
          entityPersisters.add( elementPersister );
          entityOwners.add( new Integer( ownerIndex ) );
          entityAliases.add( fetchRtn.getElementEntityAliases() );
          ArrayHelper.addAll( querySpaces, elementPersister.getQuerySpaces() );
        }
        includeInResultRowList.add( false );
      }
      else {
        throw new HibernateException( "unexpected custom query return type : " + rtn.getClass().getName() );
View Full Code Here


      EntityType ownerType = ( EntityType ) persister.getElementType();
      entityName = ownerType.getAssociatedEntityName( getFactory() );
    }
    else if ( ownerDescriptor instanceof FetchReturn ) {
      FetchReturn fetchRtn = ( FetchReturn ) ownerDescriptor;
      Queryable persister = determineAppropriateOwnerPersister( fetchRtn.getOwner() );
      Type ownerType = persister.getPropertyType( fetchRtn.getOwnerProperty() );
      if ( ownerType.isEntityType() ) {
        entityName = ( ( EntityType ) ownerType ).getAssociatedEntityName( getFactory() );
      }
      else if ( ownerType.isCollectionType() ) {
        Type ownerCollectionElementType = ( ( CollectionType ) ownerType ).getElementType( getFactory() );
View Full Code Here

    Iterator iter = entityPersisters.values().iterator();
    while ( iter.hasNext() ) {
      //test this entity to see if we must query it
      EntityPersister testPersister = (EntityPersister) iter.next();
      if ( testPersister instanceof Queryable ) {
        Queryable testQueryable = (Queryable) testPersister;
        String testClassName = testQueryable.getEntityName();
        boolean isMappedClass = className.equals(testClassName);
        if ( testQueryable.isExplicitPolymorphism() ) {
          if ( isMappedClass ) {
            return new String[] {className}; //NOTE EARLY EXIT
          }
        }
        else {
          if (isMappedClass) {
            results.add(testClassName);
          }
          else {
            final Class mappedClass = testQueryable.getMappedClass( EntityMode.POJO );
            if ( mappedClass!=null && clazz.isAssignableFrom( mappedClass ) ) {
              final boolean assignableSuperclass;
              if ( testQueryable.isInherited() ) {
                Class mappedSuperclass = getEntityPersister( testQueryable.getMappedSuperclass() ).getMappedClass( EntityMode.POJO);
                assignableSuperclass = clazz.isAssignableFrom(mappedSuperclass);
              }
              else {
                assignableSuperclass = false;
              }
View Full Code Here

  protected void postProcessDML(RestrictableStatement statement) throws SemanticException {
    statement.getFromClause().resolve();

    FromElement fromElement = ( FromElement ) statement.getFromClause().getFromElements().get( 0 );
    Queryable persister = fromElement.getQueryable();
    // Make #@%$^#^&# sure no alias is applied to the table name
    fromElement.setText( persister.getTableName() );

//    // append any filter fragments; the EMPTY_MAP is used under the assumption that
//    // currently enabled filters should not affect this process
//    if ( persister.getDiscriminatorType() != null ) {
//      new SyntheticAndFactory( getASTFactory() ).addDiscriminatorWhereFragment(
//              statement,
//              persister,
//              java.util.Collections.EMPTY_MAP,
//              fromElement.getTableAlias()
//      );
//    }
    if ( persister.getDiscriminatorType() != null || ! queryTranslatorImpl.getEnabledFilters().isEmpty() ) {
      new SyntheticAndFactory( this ).addDiscriminatorWhereFragment(
              statement,
              persister,
              queryTranslatorImpl.getEnabledFilters(),
              fromElement.getTableAlias()
View Full Code Here

  protected void postProcessInsert(AST insert) throws SemanticException, QueryException {
    InsertStatement insertStatement = ( InsertStatement ) insert;
    insertStatement.validate();

    SelectClause selectClause = insertStatement.getSelectClause();
    Queryable persister = insertStatement.getIntoClause().getQueryable();

    if ( !insertStatement.getIntoClause().isExplicitIdInsertion() ) {
      // We need to generate ids as part of this bulk insert.
      //
      // Note that this is only supported for sequence-style generators and
      // post-insert-style generators; basically, only in-db generators
      IdentifierGenerator generator = persister.getIdentifierGenerator();
      if ( !supportsIdGenWithBulkInsertion( generator ) ) {
        throw new QueryException( "can only generate ids as part of bulk insert with either sequence or post-insert style generators" );
      }

      AST idSelectExprNode = null;

      if ( SequenceGenerator.class.isAssignableFrom( generator.getClass() ) ) {
        String seqName = ( String ) ( ( SequenceGenerator ) generator ).generatorKey();
        String nextval = sessionFactoryHelper.getFactory().getDialect().getSelectSequenceNextValString( seqName );
        idSelectExprNode = getASTFactory().create( HqlSqlTokenTypes.SQL_TOKEN, nextval );
      }
      else {
        //Don't need this, because we should never ever be selecting no columns in an insert ... select...
        //and because it causes a bug on DB2
        /*String idInsertString = sessionFactoryHelper.getFactory().getDialect().getIdentityInsertString();
        if ( idInsertString != null ) {
          idSelectExprNode = getASTFactory().create( HqlSqlTokenTypes.SQL_TOKEN, idInsertString );
        }*/
      }

      if ( idSelectExprNode != null ) {
        AST currentFirstSelectExprNode = selectClause.getFirstChild();
        selectClause.setFirstChild( idSelectExprNode );
        idSelectExprNode.setNextSibling( currentFirstSelectExprNode );

        insertStatement.getIntoClause().prependIdColumnSpec();
      }
    }

    final boolean includeVersionProperty = persister.isVersioned() &&
        !insertStatement.getIntoClause().isExplicitVersionInsertion() &&
        persister.isVersionPropertyInsertable();
    if ( includeVersionProperty ) {
      // We need to seed the version value as part of this bulk insert
      VersionType versionType = persister.getVersionType();
      AST versionValueNode = null;

      if ( sessionFactoryHelper.getFactory().getDialect().supportsParametersInInsertSelect() ) {
        int sqlTypes[] = versionType.sqlTypes( sessionFactoryHelper.getFactory() );
        if ( sqlTypes == null || sqlTypes.length == 0 ) {
View Full Code Here

    return numberOfParametersInSetClause;
  }

  protected void evaluateAssignment(AST eq) throws SemanticException {
    prepareLogicOperator( eq );
    Queryable persister = getCurrentFromClause().getFromElement().getQueryable();
    evaluateAssignment( eq, persister, -1 );
  }
View Full Code Here

  public ArrayList getAssignmentSpecifications() {
    return assignmentSpecifications;
  }

  protected AST createIntoClause(String path, AST propertySpec) throws SemanticException {
    Queryable persister = ( Queryable ) getSessionFactoryHelper().requireClassPersister( path );

    IntoClause intoClause = ( IntoClause ) getASTFactory().create( INTO, persister.getEntityName() );
    intoClause.setFirstChild( propertySpec );
    intoClause.initialize( persister );

    addQuerySpaces( persister.getQuerySpaces() );

    return intoClause;
  }
View Full Code Here

  protected void prepareVersioned(AST updateNode, AST versioned) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) updateNode;
    FromClause fromClause = updateStatement.getFromClause();
    if ( versioned != null ) {
      // Make sure that the persister is versioned
      Queryable persister = fromClause.getFromElement().getQueryable();
      if ( !persister.isVersioned() ) {
        throw new SemanticException( "increment option specified for update of non-versioned entity" );
      }

      VersionType versionType = persister.getVersionType();
      if ( versionType instanceof UserVersionType ) {
        throw new SemanticException( "user-defined version types not supported for increment option" );
      }

      AST eq = getASTFactory().create( HqlSqlTokenTypes.EQ, "=" );
View Full Code Here

        if ( joinType != NONE ) throw new QueryException( "outer or full join must be followed by path expression" );

        if ( afterClass ) {
          // treat it as a classname
          Queryable p = q.getEntityPersisterUsingImports( token );
          if ( p == null ) throw new QueryException( "persister not found: " + token );
          q.addFromClass( alias, p );
        }
        else {
          // treat it as a path expression
          peParser.setJoinType( JoinFragment.INNER_JOIN );
          peParser.setUseThetaStyleJoin( true );
          ParserHelper.parse( peParser, q.unalias( token ), ParserHelper.PATH_SEPARATORS, q );
          if ( !peParser.isCollectionValued() ) throw new QueryException( "path expression did not resolve to collection: " + token );
          String nm = peParser.addFromCollection( q );
          q.setAliasName( alias, nm );
        }

        alias = null;
        afterIn = false;
        afterClass = false;
        expectingJoin = true;
      }
      else if( memberDeclarations && expectingPathExpression ){
        expectingAs = true;
        peParser.setJoinType( JoinFragment.INNER_JOIN );
        peParser.setUseThetaStyleJoin( false );
        ParserHelper.parse( peParser, q.unalias( token ), ParserHelper.PATH_SEPARATORS, q );
        if ( !peParser.isCollectionValued() ) throw new QueryException( "path expression did not resolve to collection: " + token );
        collectionName = peParser.addFromCollection( q );
        expectingPathExpression = false;
        memberDeclarations = false;
      }
      else {

        // handle a path expression or class name that
        // appears at the start, in the "new" HQL
        // style or an alias that appears at the start
        // in the "old" HQL style

        Queryable p = q.getEntityPersisterUsingImports( token );
        if ( p != null ) {
          // starts with the name of a mapped class (new style)
          if ( joinType != NONE ) throw new QueryException( "outer or full join must be followed by path expression" );
          entityName = q.createNameFor( p.getEntityName() );
          q.addFromClass( entityName, p );
          expectingAs = true;
        }
        else if ( token.indexOf( '.' ) < 0 ) {
          // starts with an alias (old style)
View Full Code Here

    else if ( token.startsWith( ParserHelper.HQL_VARIABLE_PREFIX ) ) { //named query parameter
      q.addNamedParameter( token.substring( 1 ) );
      appendToken( q, "?" );
    }
    else {
      Queryable persister = q.getEntityPersisterUsingImports( token );
      if ( persister != null ) { // the name of a class
        final String discrim = persister.getDiscriminatorSQLValue();
        if ( InFragment.NULL.equals(discrim) || InFragment.NOT_NULL.equals(discrim) ) {
          throw new QueryException( "subclass test not allowed for null or not null discriminator" );
        }
        else {
          appendToken( q, discrim );
View Full Code Here

TOP

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

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.