Search in sources :

Example 1 with Insert

use of org.hibernate.sql.Insert in project hibernate-orm by hibernate.

the class BasicCollectionPersister method generateInsertRowString.

/**
	 * Generate the SQL INSERT that creates a new row
	 */
@Override
protected String generateInsertRowString() {
    final Insert insert = new Insert(getDialect()).setTableName(qualifiedTableName).addColumns(keyColumnNames);
    if (hasIdentifier) {
        insert.addColumn(identifierColumnName);
    }
    if (hasIndex) /*&& !indexIsFormula*/
    {
        insert.addColumns(indexColumnNames, indexColumnIsSettable);
    }
    if (getFactory().getSessionFactoryOptions().isCommentsEnabled()) {
        insert.setComment("insert collection row " + getRole());
    }
    //if ( !elementIsFormula ) {
    insert.addColumns(elementColumnNames, elementColumnIsSettable, elementColumnWriters);
    return insert.toStatementString();
}
Also used : Insert(org.hibernate.sql.Insert)

Example 2 with Insert

use of org.hibernate.sql.Insert in project hibernate-orm by hibernate.

the class AbstractEntityPersister method generateIdentityInsertString.

/**
	 * Used to generate an insery statement against the root table in the
	 * case of identifier generation strategies where the insert statement
	 * executions actually generates the identifier value.
	 *
	 * @param includeProperty indices of the properties to include in the
	 * insert statement.
	 *
	 * @return The insert SQL statement string
	 */
protected String generateIdentityInsertString(boolean[] includeProperty) {
    Insert insert = identityDelegate.prepareIdentifierGeneratingInsert();
    insert.setTableName(getTableName(0));
    // add normal properties except lobs
    for (int i = 0; i < entityMetamodel.getPropertySpan(); i++) {
        if (includeProperty[i] && isPropertyOfTable(i, 0) && !lobProperties.contains(i)) {
            // this property belongs on the table and is to be inserted
            insert.addColumns(getPropertyColumnNames(i), propertyColumnInsertable[i], propertyColumnWriters[i]);
        }
    }
    // and updates.  Insert them at the end.
    for (int i : lobProperties) {
        if (includeProperty[i] && isPropertyOfTable(i, 0)) {
            insert.addColumns(getPropertyColumnNames(i), propertyColumnInsertable[i], propertyColumnWriters[i]);
        }
    }
    // add the discriminator
    addDiscriminatorToInsert(insert);
    if (getFactory().getSessionFactoryOptions().isCommentsEnabled()) {
        insert.setComment("insert " + getEntityName());
    }
    return insert.toStatementString();
}
Also used : Insert(org.hibernate.sql.Insert)

Example 3 with Insert

use of org.hibernate.sql.Insert in project hibernate-orm by hibernate.

the class AbstractEntityPersister method generateInsertString.

/**
	 * Generate the SQL that inserts a row
	 */
protected String generateInsertString(boolean identityInsert, boolean[] includeProperty, int j) {
    // todo : remove the identityInsert param and variations;
    //   identity-insert strings are now generated from generateIdentityInsertString()
    Insert insert = new Insert(getFactory().getDialect()).setTableName(getTableName(j));
    // add normal properties
    for (int i = 0; i < entityMetamodel.getPropertySpan(); i++) {
        // values
        if (isPropertyOfTable(i, j)) {
            if (!lobProperties.contains(i)) {
                final InDatabaseValueGenerationStrategy generationStrategy = entityMetamodel.getInDatabaseValueGenerationStrategies()[i];
                if (generationStrategy != null && generationStrategy.getGenerationTiming().includesInsert()) {
                    if (generationStrategy.referenceColumnsInSql()) {
                        final String[] values;
                        if (generationStrategy.getReferencedColumnValues() == null) {
                            values = propertyColumnWriters[i];
                        } else {
                            final int numberOfColumns = propertyColumnWriters[i].length;
                            values = new String[numberOfColumns];
                            for (int x = 0; x < numberOfColumns; x++) {
                                if (generationStrategy.getReferencedColumnValues()[x] != null) {
                                    values[x] = generationStrategy.getReferencedColumnValues()[x];
                                } else {
                                    values[x] = propertyColumnWriters[i][x];
                                }
                            }
                        }
                        insert.addColumns(getPropertyColumnNames(i), propertyColumnInsertable[i], values);
                    }
                } else if (includeProperty[i]) {
                    insert.addColumns(getPropertyColumnNames(i), propertyColumnInsertable[i], propertyColumnWriters[i]);
                }
            }
        }
    }
    // add the discriminator
    if (j == 0) {
        addDiscriminatorToInsert(insert);
    }
    // add the primary key
    if (j == 0 && identityInsert) {
        insert.addIdentityColumn(getKeyColumns(0)[0]);
    } else {
        insert.addColumns(getKeyColumns(j));
    }
    if (getFactory().getSessionFactoryOptions().isCommentsEnabled()) {
        insert.setComment("insert " + getEntityName());
    }
    // and updates.  Insert them at the end.
    for (int i : lobProperties) {
        if (includeProperty[i] && isPropertyOfTable(i, j)) {
            // this property belongs on the table and is to be inserted
            insert.addColumns(getPropertyColumnNames(i), propertyColumnInsertable[i], propertyColumnWriters[i]);
        }
    }
    String result = insert.toStatementString();
    // append the SQL to return the generated identifier
    if (j == 0 && identityInsert && useInsertSelectIdentity()) {
        //TODO: suck into Insert
        result = getFactory().getDialect().getIdentityColumnSupport().appendIdentitySelectToInsert(result);
    }
    return result;
}
Also used : InDatabaseValueGenerationStrategy(org.hibernate.tuple.InDatabaseValueGenerationStrategy) Insert(org.hibernate.sql.Insert)

Aggregations

Insert (org.hibernate.sql.Insert)3 InDatabaseValueGenerationStrategy (org.hibernate.tuple.InDatabaseValueGenerationStrategy)1