Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 249
Anatoly Avatar asked Apr 12 '13 18:04

Anatoly


1 Answers

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?

like image 60
jeff Avatar answered Sep 26 '22 01:09

jeff