Hibernate hbm2ddl.auto possible values and what they do?

I really want to know more about the update, export and the values that could be given to hbm2ddl.auto.
I need to know when to use the update and when not? And what is the alternative?

These are changes that could happen over DB:
New tables
new columns in old tables
columns deleted
data type of a column changed
a type of a column changed it attributes
tables have been dropped
values of a column has changed
In each case what is the best solution?

hibernate.hbm2ddl.auto Automatically validates or exports schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.


e.g. validate | update | create | create-drop


So the list of possible options are,


validate: validate the schema, makes no changes to the database.

update: update the schema.

create: creates the schema, destroying previous data.

create-drop: drop the schema at the end of the session.
The configuration property is called hibernate.hbm2ddl.auto


In our development environment we set hibernate.hbm2ddl.auto=create-drop to drop and create a clean database each time we deploy, so that our database is in a known state.


In theory, you can set hibernate.hbm2ddl.auto=update to update your database with changes to your model, but I would not trust that on a production database. An earlier version of the documentation said that this was experimental, at least; I do not know the current status.


Therefore, for our production database, do not set hibernate.hbm2ddl.auto - the default is to make no database changes. Instead, we manually create an SQL DDL update script that applies changes from one version to the next.