Java tutorial
/* * 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 "; } }