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