Java 类org.hibernate.sql.Update 实例源码

项目:lams    文件:OneToManyPersister.java   
/**
 * Generate the SQL UPDATE that updates all the foreign keys to null
 */
@Override
   protected String generateDeleteString() {

    Update update = new Update( getDialect() )
            .setTableName( qualifiedTableName )
            .addColumns( keyColumnNames, "null" )
            .addPrimaryKeyColumns( keyColumnNames );

    if ( hasIndex && !indexContainsFormula ) update.addColumns( indexColumnNames, "null" );

    if ( hasWhere ) update.setWhere( sqlWhereString );

    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "delete one-to-many " + getRole() );
    }

    return update.toStatementString();
}
项目:lams    文件:OneToManyPersister.java   
/**
 * Generate the SQL UPDATE that updates a foreign key to a value
 */
@Override
   protected String generateInsertRowString() {

    Update update = new Update( getDialect() )
            .setTableName( qualifiedTableName )
            .addColumns( keyColumnNames );

    if ( hasIndex && !indexContainsFormula ) update.addColumns( indexColumnNames );

    //identifier collections not supported for 1-to-many
    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "create one-to-many row " + getRole() );
    }

    return update.addPrimaryKeyColumns( elementColumnNames, elementColumnWriters )
            .toStatementString();
}
项目:lams    文件:OneToManyPersister.java   
/**
 * Generate the SQL UPDATE that updates a particular row's foreign
 * key to null
 */
@Override
   protected String generateDeleteRowString() {

    Update update = new Update( getDialect() )
            .setTableName( qualifiedTableName )
            .addColumns( keyColumnNames, "null" );

    if ( hasIndex && !indexContainsFormula ) update.addColumns( indexColumnNames, "null" );

    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "delete one-to-many row " + getRole() );
    }

    //use a combination of foreign key columns and pk columns, since
    //the ordering of removal and addition is not guaranteed when
    //a child moves from one parent to another
    String[] rowSelectColumnNames = ArrayHelper.join( keyColumnNames, elementColumnNames );
    return update.addPrimaryKeyColumns( rowSelectColumnNames )
            .toStatementString();
}
项目:cacheonix-core    文件:BasicCollectionPersister.java   
/**
 * Generate the SQL UPDATE that updates a row
 */
protected String generateUpdateRowString() {

    Update update = new Update( getDialect() )
        .setTableName( qualifiedTableName );

    //if ( !elementIsFormula ) {
        update.addColumns( elementColumnNames, elementColumnIsSettable );
    //}

    if ( hasIdentifier ) {
        update.setPrimaryKeyColumnNames( new String[]{ identifierColumnName } );
    }
    else if ( hasIndex && !indexContainsFormula ) {
        update.setPrimaryKeyColumnNames( ArrayHelper.join( keyColumnNames, indexColumnNames ) );
    }
    else {
        update.setPrimaryKeyColumnNames( ArrayHelper.join( keyColumnNames, elementColumnNames, elementColumnIsInPrimaryKey ) );
    }

    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "update collection row " + getRole() );
    }

    return update.toStatementString();
}
项目:cacheonix-core    文件:OneToManyPersister.java   
/**
 * Generate the SQL UPDATE that updates all the foreign keys to null
 */
protected String generateDeleteString() {

    Update update = new Update( getDialect() )
            .setTableName( qualifiedTableName )
            .addColumns( keyColumnNames, "null" )
            .setPrimaryKeyColumnNames( keyColumnNames );

    if ( hasIndex && !indexContainsFormula ) update.addColumns( indexColumnNames, "null" );

    if ( hasWhere ) update.setWhere( sqlWhereString );

    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "delete one-to-many " + getRole() );
    }

    return update.toStatementString();
}
项目:cacheonix-core    文件:OneToManyPersister.java   
/**
 * Generate the SQL UPDATE that updates a foreign key to a value
 */
protected String generateInsertRowString() {

    Update update = new Update( getDialect() )
            .setTableName( qualifiedTableName )
            .addColumns( keyColumnNames );

    if ( hasIndex && !indexContainsFormula ) update.addColumns( indexColumnNames );

    //identifier collections not supported for 1-to-many
    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "create one-to-many row " + getRole() );
    }

    return update.setPrimaryKeyColumnNames( elementColumnNames )
            .toStatementString();
}
项目:cacheonix-core    文件:OneToManyPersister.java   
/**
 * Generate the SQL UPDATE that updates a particular row's foreign
 * key to null
 */
protected String generateDeleteRowString() {

    Update update = new Update( getDialect() )
            .setTableName( qualifiedTableName )
            .addColumns( keyColumnNames, "null" );

    if ( hasIndex && !indexContainsFormula ) update.addColumns( indexColumnNames, "null" );

    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "delete one-to-many row " + getRole() );
    }

    //use a combination of foreign key columns and pk columns, since
    //the ordering of removal and addition is not guaranteed when
    //a child moves from one parent to another
    String[] rowSelectColumnNames = ArrayHelper.join(keyColumnNames, elementColumnNames);
    return update.setPrimaryKeyColumnNames( rowSelectColumnNames )
            .toStatementString();
}
项目:lams    文件:AbstractEntityPersister.java   
private String generateVersionIncrementUpdateString() {
    Update update = new Update( getFactory().getDialect() );
    update.setTableName( getTableName( 0 ) );
    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "forced version increment" );
    }
    update.addColumn( getVersionColumnName() );
    update.addPrimaryKeyColumns( getIdentifierColumnNames() );
    update.setVersionColumnName( getVersionColumnName() );
    return update.toStatementString();
}
项目:lams    文件:BasicCollectionPersister.java   
/**
 * Generate the SQL UPDATE that updates a row
 */
@Override
   protected String generateUpdateRowString() {

    Update update = new Update( getDialect() )
        .setTableName( qualifiedTableName );

    //if ( !elementIsFormula ) {
        update.addColumns( elementColumnNames, elementColumnIsSettable, elementColumnWriters );
    //}

    if ( hasIdentifier ) {
        update.addPrimaryKeyColumns( new String[]{ identifierColumnName } );
    }
    else if ( hasIndex && !indexContainsFormula ) {
        update.addPrimaryKeyColumns( ArrayHelper.join( keyColumnNames, indexColumnNames ) );
    }
    else {
        update.addPrimaryKeyColumns( keyColumnNames );
        update.addPrimaryKeyColumns( elementColumnNames, elementColumnIsInPrimaryKey, elementColumnWriters );
    }

    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "update collection row " + getRole() );
    }

    return update.toStatementString();
}
项目:lams    文件:OneToManyPersister.java   
/**
 * Generate the SQL UPDATE that inserts a collection index
 */
@Override
   protected String generateUpdateRowString() {
    Update update = new Update( getDialect() ).setTableName( qualifiedTableName );
    update.addPrimaryKeyColumns( elementColumnNames, elementColumnIsSettable, elementColumnWriters );
    if ( hasIdentifier ) {
        update.addPrimaryKeyColumns( new String[]{ identifierColumnName } );
    }
    if ( hasIndex && !indexContainsFormula ) {
        update.addColumns( indexColumnNames );
    }

    return update.toStatementString();
}
项目:lams    文件:UpdateLockingStrategy.java   
protected String generateLockString() {
    final SessionFactoryImplementor factory = lockable.getFactory();
    final Update update = new Update( factory.getDialect() );
    update.setTableName( lockable.getRootTableName() );
    update.addPrimaryKeyColumns( lockable.getRootTableIdentifierColumnNames() );
    update.setVersionColumnName( lockable.getVersionColumnName() );
    update.addColumn( lockable.getVersionColumnName() );
    if ( factory.getSettings().isCommentsEnabled() ) {
        update.setComment( lockMode + " lock " + lockable.getEntityName() );
    }
    return update.toStatementString();
}
项目:lams    文件:PessimisticWriteUpdateLockingStrategy.java   
protected String generateLockString() {
    final SessionFactoryImplementor factory = lockable.getFactory();
    final Update update = new Update( factory.getDialect() );
    update.setTableName( lockable.getRootTableName() );
    update.addPrimaryKeyColumns( lockable.getRootTableIdentifierColumnNames() );
    update.setVersionColumnName( lockable.getVersionColumnName() );
    update.addColumn( lockable.getVersionColumnName() );
    if ( factory.getSettings().isCommentsEnabled() ) {
        update.setComment( lockMode + " lock " + lockable.getEntityName() );
    }
    return update.toStatementString();
}
项目:lams    文件:PessimisticReadUpdateLockingStrategy.java   
protected String generateLockString() {
    final SessionFactoryImplementor factory = lockable.getFactory();
    final Update update = new Update( factory.getDialect() );
    update.setTableName( lockable.getRootTableName() );
    update.addPrimaryKeyColumns( lockable.getRootTableIdentifierColumnNames() );
    update.setVersionColumnName( lockable.getVersionColumnName() );
    update.addColumn( lockable.getVersionColumnName() );
    if ( factory.getSettings().isCommentsEnabled() ) {
        update.setComment( lockMode + " lock " + lockable.getEntityName() );
    }
    return update.toStatementString();
}
项目:cacheonix-core    文件:AbstractEntityPersister.java   
private String generateVersionIncrementUpdateString() {
    Update update = new Update( getFactory().getDialect() );
    update.setTableName( getTableName( 0 ) );
    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "forced version increment" );
    }
    update.addColumn( getVersionColumnName() );
    update.setPrimaryKeyColumnNames( getIdentifierColumnNames() );
    update.setVersionColumnName( getVersionColumnName() );
    return update.toStatementString();
}
项目:cacheonix-core    文件:UpdateLockingStrategy.java   
protected String generateLockString() {
    SessionFactoryImplementor factory = lockable.getFactory();
    Update update = new Update( factory.getDialect() );
    update.setTableName( lockable.getRootTableName() );
    update.setPrimaryKeyColumnNames( lockable.getRootTableIdentifierColumnNames() );
    update.setVersionColumnName( lockable.getVersionColumnName() );
    update.addColumn( lockable.getVersionColumnName() );
    if ( factory.getSettings().isCommentsEnabled() ) {
        update.setComment( lockMode + " lock " + lockable.getEntityName() );
    }
    return update.toStatementString();
}
项目:lams    文件:TableBasedUpdateHandlerImpl.java   
public TableBasedUpdateHandlerImpl(
        SessionFactoryImplementor factory,
        HqlSqlWalker walker,
        String catalog,
        String schema) {
    super( factory, walker, catalog, schema );

    UpdateStatement updateStatement = ( UpdateStatement ) walker.getAST();
    FromElement fromElement = updateStatement.getFromClause().getFromElement();

    this.targetedPersister = fromElement.getQueryable();
    final String bulkTargetAlias = fromElement.getTableAlias();

    final ProcessedWhereClause processedWhereClause = processWhereClause( updateStatement.getWhereClause() );
    this.idSelectParameterSpecifications = processedWhereClause.getIdSelectParameterSpecifications();
    this.idInsertSelect = generateIdInsertSelect( targetedPersister, bulkTargetAlias, processedWhereClause );
    log.tracev( "Generated ID-INSERT-SELECT SQL (multi-table update) : {0}", idInsertSelect );

    String[] tableNames = targetedPersister.getConstraintOrderedTableNameClosure();
    String[][] columnNames = targetedPersister.getContraintOrderedTableKeyColumnClosure();
    String idSubselect = generateIdSubselect( targetedPersister );

    updates = new String[tableNames.length];
    assignmentParameterSpecifications = new ParameterSpecification[tableNames.length][];
    for ( int tableIndex = 0; tableIndex < tableNames.length; tableIndex++ ) {
        boolean affected = false;
        final List<ParameterSpecification> parameterList = new ArrayList<ParameterSpecification>();
        final Update update = new Update( factory().getDialect() )
                .setTableName( tableNames[tableIndex] )
                .setWhere( "(" + StringHelper.join( ", ", columnNames[tableIndex] ) + ") IN (" + idSubselect + ")" );
        if ( factory().getSettings().isCommentsEnabled() ) {
            update.setComment( "bulk update" );
        }
        final List<AssignmentSpecification> assignmentSpecifications = walker.getAssignmentSpecifications();
        for ( AssignmentSpecification assignmentSpecification : assignmentSpecifications ) {
            if ( assignmentSpecification.affectsTable( tableNames[tableIndex] ) ) {
                affected = true;
                update.appendAssignmentFragment( assignmentSpecification.getSqlAssignmentFragment() );
                if ( assignmentSpecification.getParameters() != null ) {
                    for ( int paramIndex = 0; paramIndex < assignmentSpecification.getParameters().length; paramIndex++ ) {
                        parameterList.add( assignmentSpecification.getParameters()[paramIndex] );
                    }
                }
            }
        }
        if ( affected ) {
            updates[tableIndex] = update.toStatementString();
            assignmentParameterSpecifications[tableIndex] = parameterList.toArray( new ParameterSpecification[parameterList.size()] );
        }
    }
}
项目:cacheonix-core    文件:AbstractEntityPersister.java   
/**
 * Generate the SQL that updates a row by id (and version)
 */
protected String generateUpdateString(final boolean[] includeProperty,
                                      final int j,
                                      final Object[] oldFields,
                                      final boolean useRowId) {

    Update update = new Update( getFactory().getDialect() ).setTableName( getTableName( j ) );

    // select the correct row by either pk or rowid
    if ( useRowId ) {
        update.setPrimaryKeyColumnNames( new String[]{rowIdName} ); //TODO: eventually, rowIdName[j]
    }
    else {
        update.setPrimaryKeyColumnNames( getKeyColumns( j ) );
    }

    boolean hasColumns = false;
    for ( int i = 0; i < entityMetamodel.getPropertySpan(); i++ ) {
        if ( includeProperty[i] && isPropertyOfTable( i, j ) ) {
            // this is a property of the table, which we are updating
            update.addColumns( getPropertyColumnNames(i), propertyColumnUpdateable[i] );
            hasColumns = hasColumns || getPropertyColumnSpan( i ) > 0;
        }
    }

    if ( j == 0 && isVersioned() && entityMetamodel.getOptimisticLockMode() == Versioning.OPTIMISTIC_LOCK_VERSION ) {
        // this is the root (versioned) table, and we are using version-based
        // optimistic locking;  if we are not updating the version, also don't
        // check it (unless this is a "generated" version column)!
        if ( checkVersion( includeProperty ) ) {
            update.setVersionColumnName( getVersionColumnName() );
            hasColumns = true;
        }
    }
    else if ( entityMetamodel.getOptimisticLockMode() > Versioning.OPTIMISTIC_LOCK_VERSION && oldFields != null ) {
        // we are using "all" or "dirty" property-based optimistic locking

        boolean[] includeInWhere = entityMetamodel.getOptimisticLockMode() == Versioning.OPTIMISTIC_LOCK_ALL ?
                getPropertyUpdateability() : //optimistic-lock="all", include all updatable properties
                includeProperty; //optimistic-lock="dirty", include all properties we are updating this time

        boolean[] versionability = getPropertyVersionability();
        Type[] types = getPropertyTypes();
        for ( int i = 0; i < entityMetamodel.getPropertySpan(); i++ ) {
            boolean include = includeInWhere[i] &&
                    isPropertyOfTable( i, j ) &&
                    versionability[i];
            if ( include ) {
                // this property belongs to the table, and it is not specifically
                // excluded from optimistic locking by optimistic-lock="false"
                String[] propertyColumnNames = getPropertyColumnNames( i );
                boolean[] propertyNullness = types[i].toColumnNullness( oldFields[i], getFactory() );
                for ( int k=0; k<propertyNullness.length; k++ ) {
                    if ( propertyNullness[k] ) {
                        update.addWhereColumn( propertyColumnNames[k] );
                    }
                    else {
                        update.addWhereColumn( propertyColumnNames[k], " is null" );
                    }
                }
            }
        }

    }

    if ( getFactory().getSettings().isCommentsEnabled() ) {
        update.setComment( "update " + getEntityName() );
    }

    return hasColumns ? update.toStatementString() : null;
}
项目:cacheonix-core    文件:MultiTableUpdateExecutor.java   
public MultiTableUpdateExecutor(HqlSqlWalker walker) {
    super( walker, log );

    if ( !walker.getSessionFactoryHelper().getFactory().getDialect().supportsTemporaryTables() ) {
        throw new HibernateException( "cannot perform multi-table updates using dialect not supporting temp tables" );
    }

    UpdateStatement updateStatement = ( UpdateStatement ) walker.getAST();
    FromElement fromElement = updateStatement.getFromClause().getFromElement();
    String bulkTargetAlias = fromElement.getTableAlias();
    this.persister = fromElement.getQueryable();

    this.idInsertSelect = generateIdInsertSelect( persister, bulkTargetAlias, updateStatement.getWhereClause() );
    log.trace( "Generated ID-INSERT-SELECT SQL (multi-table update) : " +  idInsertSelect );

    String[] tableNames = persister.getConstraintOrderedTableNameClosure();
    String[][] columnNames = persister.getContraintOrderedTableKeyColumnClosure();

    String idSubselect = generateIdSubselect( persister );
    List assignmentSpecifications = walker.getAssignmentSpecifications();

    updates = new String[tableNames.length];
    hqlParameters = new ParameterSpecification[tableNames.length][];
    for ( int tableIndex = 0; tableIndex < tableNames.length; tableIndex++ ) {
        boolean affected = false;
        List parameterList = new ArrayList();
        Update update = new Update( getFactory().getDialect() )
                .setTableName( tableNames[tableIndex] )
                .setWhere( "(" + StringHelper.join( ", ", columnNames[tableIndex] ) + ") IN (" + idSubselect + ")" );
        if ( getFactory().getSettings().isCommentsEnabled() ) {
            update.setComment( "bulk update" );
        }
        final Iterator itr = assignmentSpecifications.iterator();
        while ( itr.hasNext() ) {
            final AssignmentSpecification specification = ( AssignmentSpecification ) itr.next();
            if ( specification.affectsTable( tableNames[tableIndex] ) ) {
                affected = true;
                update.appendAssignmentFragment( specification.getSqlAssignmentFragment() );
                if ( specification.getParameters() != null ) {
                    for ( int paramIndex = 0; paramIndex < specification.getParameters().length; paramIndex++ ) {
                        parameterList.add( specification.getParameters()[paramIndex] );
                    }
                }
            }
        }
        if ( affected ) {
            updates[tableIndex] = update.toStatementString();
            hqlParameters[tableIndex] = ( ParameterSpecification[] ) parameterList.toArray( new ParameterSpecification[0] );
        }
    }
}
项目:cte-multi-table-bulk-id-stategy    文件:CTEBasedUpdateHandlerImpl.java   
public CTEBasedUpdateHandlerImpl(SessionFactoryImplementor factory,
                                 HqlSqlWalker walker, String catalog, String schema) {
    super(factory, walker, catalog, schema);

    UpdateStatement updateStatement = (UpdateStatement) walker.getAST();
    FromElement fromElement = updateStatement.getFromClause()
            .getFromElement();

    this.targetedPersister = fromElement.getQueryable();

    final ProcessedWhereClause processedWhereClause = processWhereClause(updateStatement
            .getWhereClause());
    this.idSelectParameterSpecifications = processedWhereClause
            .getIdSelectParameterSpecifications();

    final String bulkTargetAlias = fromElement.getTableAlias();

    this.idSelect = generateIdSelect(targetedPersister,
            bulkTargetAlias, processedWhereClause);

    String[] tableNames = targetedPersister
            .getConstraintOrderedTableNameClosure();
    String[][] columnNames = targetedPersister
            .getContraintOrderedTableKeyColumnClosure();
    String idSubselect = generateIdSubselect( targetedPersister);

    updates = new String[tableNames.length];
    assignmentParameterSpecifications = new ParameterSpecification[tableNames.length][];
    for (int tableIndex = 0; tableIndex < tableNames.length; tableIndex++) {
        boolean affected = false;
        final List<ParameterSpecification> parameterList = new ArrayList<ParameterSpecification>();
        final Update update = new Update( factory().getDialect())
                .setTableName(tableNames[tableIndex]).setWhere(
                        "("
                                + StringHelper.join( ", ",
                                                     columnNames[tableIndex]) + ") IN ("
                                + idSubselect + ")");
        if (factory().getSettings().isCommentsEnabled()) {
            update.setComment("bulk update");
        }
        final List<AssignmentSpecification> assignmentSpecifications = walker
                .getAssignmentSpecifications();
        for (AssignmentSpecification assignmentSpecification : assignmentSpecifications) {
            if (assignmentSpecification
                    .affectsTable(tableNames[tableIndex])) {
                affected = true;
                update.appendAssignmentFragment(assignmentSpecification
                        .getSqlAssignmentFragment());
                if (assignmentSpecification.getParameters() != null) {
                    for (int paramIndex = 0; paramIndex < assignmentSpecification
                            .getParameters().length; paramIndex++) {
                        parameterList.add(assignmentSpecification
                                .getParameters()[paramIndex]);
                    }
                }
            }
        }
        if (affected) {
            updates[tableIndex] = update.toStatementString();
            assignmentParameterSpecifications[tableIndex] = parameterList
                    .toArray(new ParameterSpecification[parameterList
                            .size()]);
        }
    }
}
项目:cte-multi-table-bulk-id-stategy    文件:CTEBasedUpdateHandlerImpl.java   
public CTEBasedUpdateHandlerImpl(SessionFactoryImplementor factory,
        HqlSqlWalker walker, String catalog, String schema) {
    super(factory, walker, catalog, schema);

    UpdateStatement updateStatement = (UpdateStatement) walker.getAST();
    FromElement fromElement = updateStatement.getFromClause()
            .getFromElement();

    this.targetedPersister = fromElement.getQueryable();

    final ProcessedWhereClause processedWhereClause = processWhereClause(updateStatement
            .getWhereClause());
    this.idSelectParameterSpecifications = processedWhereClause
            .getIdSelectParameterSpecifications();

    final String bulkTargetAlias = fromElement.getTableAlias();

    this.idSelect = generateIdSelect(targetedPersister,
            bulkTargetAlias, processedWhereClause);

    String[] tableNames = targetedPersister
            .getConstraintOrderedTableNameClosure();
    String[][] columnNames = targetedPersister
            .getContraintOrderedTableKeyColumnClosure();
    String idSubselect = generateIdSubselect(targetedPersister);

    updates = new String[tableNames.length];
    assignmentParameterSpecifications = new ParameterSpecification[tableNames.length][];
    for (int tableIndex = 0; tableIndex < tableNames.length; tableIndex++) {
        boolean affected = false;
        final List<ParameterSpecification> parameterList = new ArrayList<ParameterSpecification>();
        final Update update = new Update(factory().getDialect())
                .setTableName(tableNames[tableIndex]).setWhere(
                        "("
                                + StringHelper.join(", ",
                                        columnNames[tableIndex]) + ") IN ("
                                + idSubselect + ")");
        if (factory().getSettings().isCommentsEnabled()) {
            update.setComment("bulk update");
        }
        final List<AssignmentSpecification> assignmentSpecifications = walker
                .getAssignmentSpecifications();
        for (AssignmentSpecification assignmentSpecification : assignmentSpecifications) {
            if (assignmentSpecification
                    .affectsTable(tableNames[tableIndex])) {
                affected = true;
                update.appendAssignmentFragment(assignmentSpecification
                        .getSqlAssignmentFragment());
                if (assignmentSpecification.getParameters() != null) {
                    for (int paramIndex = 0; paramIndex < assignmentSpecification
                            .getParameters().length; paramIndex++) {
                        parameterList.add(assignmentSpecification
                                .getParameters()[paramIndex]);
                    }
                }
            }
        }
        if (affected) {
            updates[tableIndex] = update.toStatementString();
            assignmentParameterSpecifications[tableIndex] = parameterList
                    .toArray(new ParameterSpecification[parameterList
                            .size()]);
        }
    }
}