Package org.hibernate.persister.entity

Examples of org.hibernate.persister.entity.Queryable$Declarer


      );
    }
  }

  private String getPathEntityName(String path) {
    Queryable persister = ( Queryable ) sessionFactory.getEntityPersister( rootEntityName );
    StringTokenizer tokens = new StringTokenizer( path, "." );
    String componentPath = "";
    while ( tokens.hasMoreTokens() ) {
      componentPath += tokens.nextToken();
      Type type = persister.toType( componentPath );
      if ( type.isAssociationType() ) {
        AssociationType atype = ( AssociationType ) type;
        persister = ( Queryable ) sessionFactory.getEntityPersister(
            atype.getAssociatedEntityName( sessionFactory )
        );
        componentPath = "";
      }
      else if ( type.isComponentType() ) {
        componentPath += '.';
      }
      else {
        throw new QueryException( "not an association: " + componentPath );
      }
    }
    return persister.getEntityName();
  }
View Full Code Here


  public TypedValue getTypedValue(Criteria subcriteria, String propertyName, Object value)
      throws HibernateException {
    // Detect discriminator values...
    if ( value instanceof Class ) {
      Class entityClass = ( Class ) value;
      Queryable q = SessionFactoryHelper.findQueryableUsingImports( sessionFactory, entityClass.getName() );
      if ( q != null ) {
        Type type = q.getDiscriminatorType();
        String stringValue = q.getDiscriminatorSQLValue();
        // Convert the string value into the proper type.
        if ( type instanceof NullableType ) {
          NullableType nullableType = ( NullableType ) type;
          value = nullableType.fromStringValue( stringValue );
        }
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

  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()
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() ) {
        versionValueNode = getASTFactory().create( HqlSqlTokenTypes.PARAM, "?" );
        ParameterSpecification paramSpec = new VersionTypeSeedParameterSpecification( versionType );
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

  private StatementExecutor buildAppropriateStatementExecutor(HqlSqlWalker walker) {
    Statement statement = ( Statement ) walker.getAST();
    if ( walker.getStatementType() == HqlSqlTokenTypes.DELETE ) {
      FromElement fromElement = walker.getFinalFromClause().getFromElement();
      Queryable persister = fromElement.getQueryable();
      if ( persister.isMultiTable() ) {
        return new MultiTableDeleteExecutor( walker );
      }
      else {
        return new BasicExecutor( walker, persister );
      }
    }
    else if ( walker.getStatementType() == HqlSqlTokenTypes.UPDATE ) {
      FromElement fromElement = walker.getFinalFromClause().getFromElement();
      Queryable persister = fromElement.getQueryable();
      if ( persister.isMultiTable() ) {
        // even here, if only properties mapped to the "base table" are referenced
        // in the set and where clauses, this could be handled by the BasicDelegate.
        // TODO : decide if it is better performance-wise to perform that check, or to simply use the MultiTableUpdateDelegate
        return new MultiTableUpdateExecutor( walker );
      }
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

TOP

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

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.