/*
 * 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.tool.hbm2ddl;

import java.util.Locale;
import org.jboss.logging.Logger;

Unique columns and unique keys both use unique constraints in most dialects. SchemaUpdate needs to create these constraints, but DB's support for finding existing constraints is extremely inconsistent. Further, non-explicitly-named unique constraints use randomly generated characters.
Author:Brett Meyer
/** * Unique columns and unique keys both use unique constraints in most dialects. * SchemaUpdate needs to create these constraints, but DB's * support for finding existing constraints is extremely inconsistent. Further, * non-explicitly-named unique constraints use randomly generated characters. * * @author Brett Meyer */
public enum UniqueConstraintSchemaUpdateStrategy {
Attempt to drop, then (re-)create each unique constraint. Ignore any exceptions thrown. Note that this will require unique keys/constraints to be explicitly named. If Hibernate generates the names (randomly), the drop will not work. DEFAULT
/** * Attempt to drop, then (re-)create each unique constraint. Ignore any * exceptions thrown. Note that this will require unique keys/constraints * to be explicitly named. If Hibernate generates the names (randomly), * the drop will not work. * * DEFAULT */
DROP_RECREATE_QUIETLY,
Attempt to (re-)create unique constraints, ignoring exceptions thrown (e.g., if the constraint already existed)
/** * Attempt to (re-)create unique constraints, ignoring exceptions thrown * (e.g., if the constraint already existed) */
RECREATE_QUIETLY,
Do not attempt to create unique constraints on a schema update
/** * Do not attempt to create unique constraints on a schema update */
SKIP; private static final Logger log = Logger.getLogger( UniqueConstraintSchemaUpdateStrategy.class ); public static UniqueConstraintSchemaUpdateStrategy byName(String name) { return valueOf( name.toUpperCase(Locale.ROOT) ); } public static UniqueConstraintSchemaUpdateStrategy interpret(Object setting) { log.tracef( "Interpreting UniqueConstraintSchemaUpdateStrategy from setting : %s", setting ); if ( setting == null ) { // default return DROP_RECREATE_QUIETLY; } if ( UniqueConstraintSchemaUpdateStrategy.class.isInstance( setting ) ) { return (UniqueConstraintSchemaUpdateStrategy) setting; } try { final UniqueConstraintSchemaUpdateStrategy byName = byName( setting.toString() ); if ( byName != null ) { return byName; } } catch ( Exception ignore ) { } log.debugf( "Unable to interpret given setting [%s] as UniqueConstraintSchemaUpdateStrategy", setting ); // default return DROP_RECREATE_QUIETLY; } }