org.hibernate.dialect.unique.DefaultUniqueDelegate.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.dialect.unique.DefaultUniqueDelegate.java

Source

/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */
package org.hibernate.dialect.unique;

import java.util.Iterator;

import org.hibernate.boot.Metadata;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.hibernate.mapping.UniqueKey;

/**
 * The default UniqueDelegate implementation for most dialects.  Uses
 * separate create/alter statements to apply uniqueness to a column.
 * 
 * @author Brett Meyer
 */
public class DefaultUniqueDelegate implements UniqueDelegate {
    protected final Dialect dialect;

    /**
     * Constructs DefaultUniqueDelegate
     *
     * @param dialect The dialect for which we are handling unique constraints
     */
    public DefaultUniqueDelegate(Dialect dialect) {
        this.dialect = dialect;
    }

    // legacy model ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    @Override
    public String getColumnDefinitionUniquenessFragment(org.hibernate.mapping.Column column) {
        return "";
    }

    @Override
    public String getTableCreationUniqueConstraintsFragment(org.hibernate.mapping.Table table) {
        return "";
    }

    @Override
    public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) {
        final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();

        final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter()
                .format(uniqueKey.getTable().getQualifiedTableName(), dialect);

        final String constraintName = dialect.quote(uniqueKey.getName());
        return dialect.getAlterTableString(tableName) + " add constraint " + constraintName + " "
                + uniqueConstraintSql(uniqueKey);
    }

    protected String uniqueConstraintSql(UniqueKey uniqueKey) {
        final StringBuilder sb = new StringBuilder();
        sb.append("unique (");
        final Iterator<org.hibernate.mapping.Column> columnIterator = uniqueKey.columnIterator();
        while (columnIterator.hasNext()) {
            final org.hibernate.mapping.Column column = columnIterator.next();
            sb.append(column.getQuotedName(dialect));
            if (uniqueKey.getColumnOrderMap().containsKey(column)) {
                sb.append(" ").append(uniqueKey.getColumnOrderMap().get(column));
            }
            if (columnIterator.hasNext()) {
                sb.append(", ");
            }
        }

        return sb.append(')').toString();
    }

    @Override
    public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) {
        final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();

        final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter()
                .format(uniqueKey.getTable().getQualifiedTableName(), dialect);

        final StringBuilder buf = new StringBuilder(dialect.getAlterTableString(tableName));
        buf.append(getDropUnique());
        if (dialect.supportsIfExistsBeforeConstraintName()) {
            buf.append("if exists ");
        }
        buf.append(dialect.quote(uniqueKey.getName()));
        if (dialect.supportsIfExistsAfterConstraintName()) {
            buf.append(" if exists");
        }
        return buf.toString();
    }

    protected String getDropUnique() {
        return " drop constraint ";
    }

}