Hibernate hbm2ddl.auto=update doesn't update column definitions in MySQL

Anatoly picture Anatoly · Apr 12, 2013 · Viewed 14.7k times · Source

I'm trying to update existing table with hbm2ddl.auto = update.

There is several columns in several tables where database column definitions changes from declaration in entities. Like

@Column(name="mycolumn", nullable=false, length=10)
private Long mycolumn;

and

'mycolumn' bigint(20) not null default 0

in MySQL.

Why hbm2ddl doesn't update such things? And is it possible to force such update? I want to say hbm2ddl to remove default value of column and change length of type.

Answer

jeff picture jeff · Oct 31, 2014

hibernate.hbm2ddl.auto" value="update won't modify existing table column definitions. Doing some testing I found that:

hibernate.hbm2ddl.auto" value="update will add a db column that doesn't already exist.

hibernate.hbm2ddl.auto" value="update will not delete a db column that is removed/no longer in your entity.

hibernate.hbm2ddl.auto" value="update will not modify a db column that has already been created.

You'll need to backup the table data, drop it and restart your application to get that table's schema back in sync with your entity. Then reload your data.

See:
Need clarity on hibernate.hbm2ddl.auto=update

and
Hibernate hbm2ddl.auto possible values and what they do?