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

import org.hibernate.internal.util.StringHelper;

The allowable actions in terms of schema tooling. Covers the unified JPA and HBM2DDL cases.
Author:Steve Ebersole
/** * The allowable actions in terms of schema tooling. Covers the unified JPA and HBM2DDL * cases. * * @author Steve Ebersole */
public enum Action {
No action will be performed. Valid in JPA; compatible with Hibernate's hbm2ddl action of the same name..
/** * No action will be performed. Valid in JPA; compatible with Hibernate's * hbm2ddl action of the same name.. */
NONE( "none" ),
Database creation will be generated. This is an action introduced by JPA. Hibernate's legacy hbm2ddl had no such action - its "create" action is actually equivalent to CREATE

Corresponds to a call to SchemaCreator
/** * Database creation will be generated. This is an action introduced by JPA. Hibernate's * legacy hbm2ddl had no such action - its "create" action is actually equivalent to {@link #CREATE} * <p/> * Corresponds to a call to {@link org.hibernate.tool.schema.spi.SchemaCreator} */
CREATE_ONLY( "create", "create-only" ),
Database dropping will be generated.

Corresponds to a call to SchemaDropper
/** * Database dropping will be generated. * <p/> * Corresponds to a call to {@link org.hibernate.tool.schema.spi.SchemaDropper} */
DROP( "drop" ),
Database dropping will be generated followed by database creation.

Corresponds to a call to SchemaDropper followed immediately by a call to SchemaCreator
/** * Database dropping will be generated followed by database creation. * <p/> * Corresponds to a call to {@link org.hibernate.tool.schema.spi.SchemaDropper} * followed immediately by a call to {@link org.hibernate.tool.schema.spi.SchemaCreator} */
CREATE( "drop-and-create", "create" ),
Drop the schema and recreate it on SessionFactory startup. Additionally, drop the schema on SessionFactory shutdown.

Has no corresponding call to a SchemaManagementTool delegate. It is equivalent to a

While this is a valid option for auto schema tooling, it is not a valid action to pass to SchemaManagementTool; instead it would be expected that the caller to SchemaManagementTool would split this into 2 separate requests for:
  1. CREATE
  2. DROP
/** * Drop the schema and recreate it on SessionFactory startup. Additionally, drop the * schema on SessionFactory shutdown. * <p/> * Has no corresponding call to a SchemaManagementTool delegate. It is equivalent to a * * <p/> * While this is a valid option for auto schema tooling, it is not a valid action to pass to * SchemaManagementTool; instead it would be expected that the caller to SchemaManagementTool * would split this into 2 separate requests for:<ol> * <li>{@link #CREATE}</li> * <li>{@link #DROP}</li> * </ol> */
CREATE_DROP( null, "create-drop" ),
"validate" (Hibernate only) - validate the database schema
/** * "validate" (Hibernate only) - validate the database schema */
VALIDATE( null, "validate" ),
"update" (Hibernate only) - update (alter) the database schema
/** * "update" (Hibernate only) - update (alter) the database schema */
UPDATE( null, "update" ); private final String externalJpaName; private final String externalHbm2ddlName; Action(String externalJpaName) { this( externalJpaName, externalJpaName ); } Action(String externalJpaName, String externalHbm2ddlName) { this.externalJpaName = externalJpaName; this.externalHbm2ddlName = externalHbm2ddlName; } @Override public String toString() { return getClass().getSimpleName() + "(externalJpaName=" + externalJpaName + ", externalHbm2ddlName=" + externalHbm2ddlName + ")"; }
Used when processing JPA configuration to interpret the user config values. Generally this will be a value specified by AvailableSettings.HBM2DDL_DATABASE_ACTION or AvailableSettings.HBM2DDL_SCRIPTS_ACTION
Params:
  • value – The encountered config value
Throws:
Returns:The matching enum value. An empty value will return NONE.
/** * Used when processing JPA configuration to interpret the user config values. Generally * this will be a value specified by {@link org.hibernate.cfg.AvailableSettings#HBM2DDL_DATABASE_ACTION} * or {@link org.hibernate.cfg.AvailableSettings#HBM2DDL_SCRIPTS_ACTION} * * @param value The encountered config value * * @return The matching enum value. An empty value will return {@link #NONE}. * * @throws IllegalArgumentException If the incoming value is unrecognized */
public static Action interpretJpaSetting(Object value) { if ( value == null ) { return NONE; } if ( Action.class.isInstance( value ) ) { return (Action) value; } final String name = value.toString(); if ( StringHelper.isEmpty( name ) || NONE.externalJpaName.equals( name ) ) { // default is NONE return NONE; } // prefer JPA external names for ( Action action : values() ) { if ( action.externalJpaName == null ) { continue; } if ( action.externalJpaName.equals( name ) ) { return action; } } // then check hbm2ddl names for ( Action action : values() ) { if ( action.externalHbm2ddlName == null ) { continue; } if ( action.externalHbm2ddlName.equals( name ) ) { return action; } } throw new IllegalArgumentException( "Unrecognized JPA schema generation action value : " + value ); }
Used to interpret the value of AvailableSettings.HBM2DDL_AUTO
Params:
  • value – The encountered config value
Throws:
Returns:The matching enum value. An empty value will return NONE.
/** * Used to interpret the value of {@link org.hibernate.cfg.AvailableSettings#HBM2DDL_AUTO} * * @param value The encountered config value * * @return The matching enum value. An empty value will return {@link #NONE}. * * @throws IllegalArgumentException If the incoming value is unrecognized */
public static Action interpretHbm2ddlSetting(Object value) { if ( value == null ) { return NONE; } if ( Action.class.isInstance( value ) ) { return hbm2ddlSetting( (Action) value ); } final String name = value.toString(); if ( StringHelper.isEmpty( name ) || NONE.externalJpaName.equals( name ) ) { // default is NONE return NONE; } // prefer hbm2ddl names for ( Action action : values() ) { if ( action.externalHbm2ddlName == null ) { continue; } if ( action.externalHbm2ddlName.equals( name ) ) { return hbm2ddlSetting( action ); } } // then check JPA external names for ( Action action : values() ) { if ( action.externalJpaName == null ) { continue; } if ( action.externalJpaName.equals( name ) ) { return hbm2ddlSetting( action ); } } throw new IllegalArgumentException( "Unrecognized legacy `hibernate.hbm2ddl.auto` value : " + value ); } private static Action hbm2ddlSetting(Action action) { return action; } }